Revert incorrect RCL_3 drop: RCL_3 PDK_3.0.2 PDK_3.0.3
authorPat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:30:50 +0100
branchRCL_3
changeset 11 493058e57c8c
parent 10 4ca382093dae
Revert incorrect RCL_3 drop: Revision: 201035 Kit: 201035
buildverification/autosmoketest/Group/bld.inf
buildverification/autosmoketest/Group/testtools_autosmoketest.mrp
buildverification/autosmoketest/TestApps/Scripts/smoketest_TestApps.script
buildverification/autosmoketest/TestApps/group/bld.inf
buildverification/autosmoketest/TestApps/group/smoketest_TestApp.mmp
buildverification/autosmoketest/TestApps/inc/TestAppServer.h
buildverification/autosmoketest/TestApps/inc/TestAppStep.h
buildverification/autosmoketest/TestApps/src/TestAppServer.cpp
buildverification/autosmoketest/TestApps/src/TestAppStep.cpp
buildverification/autosmoketest/TestApps/testdata/smoketest_TestApps.ini
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/ConsoleAlarmAlertServer.mmp
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertConsole.h
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertLEDFlasher.h
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServer.h
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServerMain.h
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertSession.h
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertConsole.cpp
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertLEDFlasher.cpp
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServer.cpp
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServerMain.cpp
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertSession.cpp
buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/bld.inf
buildverification/autosmoketest/Timew/Group/Smoketest_Timew.mmp
buildverification/autosmoketest/Timew/Group/bld.inf
buildverification/autosmoketest/Timew/Inc/ALMMOD.H
buildverification/autosmoketest/Timew/Inc/ALMMOD.INL
buildverification/autosmoketest/Timew/Inc/SM_STD.H
buildverification/autosmoketest/Timew/Inc/TIMEWMOD.H
buildverification/autosmoketest/Timew/Inc/TestTimewBase.h
buildverification/autosmoketest/Timew/Inc/TestTimewServer.h
buildverification/autosmoketest/Timew/Inc/TestTimewSetAlarm.h
buildverification/autosmoketest/Timew/Scripts/Smoketest_Timew.script
buildverification/autosmoketest/Timew/Src/SM_ALM.CPP
buildverification/autosmoketest/Timew/Src/SM_MOD.CPP
buildverification/autosmoketest/Timew/Src/SM_RSP.CPP
buildverification/autosmoketest/Timew/Src/SM_UTL.CPP
buildverification/autosmoketest/Timew/Src/TestTimewBase.cpp
buildverification/autosmoketest/Timew/Src/TestTimewServer.cpp
buildverification/autosmoketest/Timew/Src/TestTimewSetAlarm.cpp
buildverification/autosmoketest/Timew/TestData/Smoketest_Timew.ini
buildverification/autosmoketest/Utils/Inc/SmokeTestActive.h
buildverification/autosmoketest/Utils/Inc/SmokeTestProperty.h
buildverification/autosmoketest/Utils/Inc/SmokeTestSecureFSclient.h
buildverification/autosmoketest/Utils/Inc/SmokeTestSecureFSclientserver.h
buildverification/autosmoketest/Utils/Inc/SmokeTestSecureFSserver.h
buildverification/autosmoketest/Utils/Inc/SmokeTestTimeOutTimer.h
buildverification/autosmoketest/Utils/Inc/TestStepSmokeTest.h
buildverification/autosmoketest/Utils/Src/SmokeTestActive.cpp
buildverification/autosmoketest/Utils/Src/SmokeTestProperty.cpp
buildverification/autosmoketest/Utils/Src/SmokeTestSecureFSclient.cpp
buildverification/autosmoketest/Utils/Src/SmokeTestSecureFSserver.cpp
buildverification/autosmoketest/Utils/Src/SmokeTestTimeOutTimer.cpp
buildverification/autosmoketest/Utils/Src/TestStepSmokeTest.cpp
buildverification/autosmoketest/Utils/bwins/SmokeTestSecureFSClientU.DEF
buildverification/autosmoketest/Utils/bwins/SmokeTest_UtilsU.DEF
buildverification/autosmoketest/Utils/eabi/SmokeTestSecureFSclientU.DEF
buildverification/autosmoketest/Utils/eabi/SmokeTest_UtilsU.DEF
buildverification/autosmoketest/Utils/group/SmokeTestSecureFSclient.mmp
buildverification/autosmoketest/Utils/group/SmokeTestSecureFSserver.mmp
buildverification/autosmoketest/Utils/group/SmokeTest_Utils.mmp
buildverification/autosmoketest/Utils/group/bld.inf
buildverification/autosmoketest/agenda/Group/Smoketest_Agenda.mmp
buildverification/autosmoketest/agenda/Group/bld.inf
buildverification/autosmoketest/agenda/Inc/TestAgendaAddAppt.h
buildverification/autosmoketest/agenda/Inc/TestAgendaBase.h
buildverification/autosmoketest/agenda/Inc/TestAgendaCreateDB.h
buildverification/autosmoketest/agenda/Inc/TestAgendaServer.h
buildverification/autosmoketest/agenda/Inc/TestAgendaServerLaunchProgress.h
buildverification/autosmoketest/agenda/Scripts/Smoketest_Agenda.script
buildverification/autosmoketest/agenda/Src/TestAgendaAddAppt.cpp
buildverification/autosmoketest/agenda/Src/TestAgendaBase.cpp
buildverification/autosmoketest/agenda/Src/TestAgendaCreateDB.cpp
buildverification/autosmoketest/agenda/Src/TestAgendaServer.cpp
buildverification/autosmoketest/agenda/Src/TestAgendaServerLaunchProgress.cpp
buildverification/autosmoketest/agenda/Src/sm_agenda.ini
buildverification/autosmoketest/agenda/TestData/Smoketest_Agenda.ini
buildverification/autosmoketest/autorom/smoketests.oby
buildverification/autosmoketest/contacts/TestData/Smoketest_Contacts.ini
buildverification/autosmoketest/contacts/group/Smoketest_Contacts.mmp
buildverification/autosmoketest/contacts/group/bld.inf
buildverification/autosmoketest/contacts/inc/SmoketestContactsServer.h
buildverification/autosmoketest/contacts/inc/TestContact.h
buildverification/autosmoketest/contacts/inc/TestContactsAddEntries.h
buildverification/autosmoketest/contacts/inc/TestContactsBase.h
buildverification/autosmoketest/contacts/inc/TestContactsCreateDB.h
buildverification/autosmoketest/contacts/scripts/Smoketest_Contacts.script
buildverification/autosmoketest/contacts/src/SmoketestContactsServer.cpp
buildverification/autosmoketest/contacts/src/TestContact.cpp
buildverification/autosmoketest/contacts/src/TestContactsAddEntries.cpp
buildverification/autosmoketest/contacts/src/TestContactsBase.cpp
buildverification/autosmoketest/contacts/src/TestContactsCreateDB.cpp
buildverification/autosmoketest/contacts/src/sm_contacts.ini
buildverification/autosmoketest/messaging/Group/Smoketest_Mess.mmp
buildverification/autosmoketest/messaging/Group/bld.inf
buildverification/autosmoketest/messaging/Inc/TestMess.h
buildverification/autosmoketest/messaging/Inc/TestMessBase.h
buildverification/autosmoketest/messaging/Inc/TestMessCleanMessageFolder.h
buildverification/autosmoketest/messaging/Inc/TestMessCreateCdmaSmsUtil.h
buildverification/autosmoketest/messaging/Inc/TestMessCreateGsmSmsUtil.h
buildverification/autosmoketest/messaging/Inc/TestMessCreateSMS.h
buildverification/autosmoketest/messaging/Inc/TestMessCreateSMSaccount.h
buildverification/autosmoketest/messaging/Inc/TestMessCreateSmsUtilBase.h
buildverification/autosmoketest/messaging/Inc/TestMessEditEntry.h
buildverification/autosmoketest/messaging/Inc/TestMessEditEntryUtil.h
buildverification/autosmoketest/messaging/Inc/TestMessPrintEntryUtil.h
buildverification/autosmoketest/messaging/Inc/TestMessProcessExistingMsg.h
buildverification/autosmoketest/messaging/Inc/TestMessProcessor.h
buildverification/autosmoketest/messaging/Inc/TestMessServer.h
buildverification/autosmoketest/messaging/Inc/TestMessSession.h
buildverification/autosmoketest/messaging/Inc/TestMessSetDefaultSc.h
buildverification/autosmoketest/messaging/Inc/TestMessSharedData.h
buildverification/autosmoketest/messaging/Inc/TestMessStoreProcessUtil.h
buildverification/autosmoketest/messaging/Inc/TestMessTimer.h
buildverification/autosmoketest/messaging/Inc/TestMessWatcher.h
buildverification/autosmoketest/messaging/Scripts/Smoketest_CreateSmsAccount.script
buildverification/autosmoketest/messaging/Scripts/Smoketest_Mess.script
buildverification/autosmoketest/messaging/Src/TestMessBase.cpp
buildverification/autosmoketest/messaging/Src/TestMessCleanMessageFolder.cpp
buildverification/autosmoketest/messaging/Src/TestMessCreateCdmaSmsUtil.cpp
buildverification/autosmoketest/messaging/Src/TestMessCreateGsmSmsUtil.cpp
buildverification/autosmoketest/messaging/Src/TestMessCreateSMS.cpp
buildverification/autosmoketest/messaging/Src/TestMessCreateSMSaccount.cpp
buildverification/autosmoketest/messaging/Src/TestMessCreateSmsUtilBase.cpp
buildverification/autosmoketest/messaging/Src/TestMessEditEntry.cpp
buildverification/autosmoketest/messaging/Src/TestMessEditEntryUtil.cpp
buildverification/autosmoketest/messaging/Src/TestMessPrintEntryUtil.cpp
buildverification/autosmoketest/messaging/Src/TestMessProcessExistingMsg.cpp
buildverification/autosmoketest/messaging/Src/TestMessProcessor.cpp
buildverification/autosmoketest/messaging/Src/TestMessServer.cpp
buildverification/autosmoketest/messaging/Src/TestMessSession.cpp
buildverification/autosmoketest/messaging/Src/TestMessSetDefaultSC.cpp
buildverification/autosmoketest/messaging/Src/TestMessSharedData.cpp
buildverification/autosmoketest/messaging/Src/TestMessStoreProcessUtil.cpp
buildverification/autosmoketest/messaging/Src/TestMessTimer.cpp
buildverification/autosmoketest/messaging/Src/TestMessWatcher.cpp
buildverification/autosmoketest/messaging/TestData/Smoketest_Mess.ini
buildverification/autosmoketest/messaging/TestData/Sms/Message1.txt
buildverification/smoketest/FileRead.pm
buildverification/smoketest/Group/8.0a/configuration.cfg
buildverification/smoketest/Group/8.0b/configuration.cfg
buildverification/smoketest/Group/8.1a/configuration.cfg
buildverification/smoketest/Group/8.1b/configuration.cfg
buildverification/smoketest/Group/9.0/configuration.cfg
buildverification/smoketest/Group/9.1/configuration.cfg
buildverification/smoketest/Group/bld.inf
buildverification/smoketest/Group/configuration.cfg
buildverification/smoketest/Group/testtools_smoketest.history.xml
buildverification/smoketest/Group/testtools_smoketest.mrp
buildverification/smoketest/Phone/group/bld.inf
buildverification/smoketest/Phone/scripts/smoketest_phone.script
buildverification/smoketest/SmokeTest.pm
buildverification/smoketest/SmokeTestClient.pl
buildverification/smoketest/SmokeTestROM.pm
buildverification/smoketest/SmokeTestServer.pl
buildverification/smoketest/SmokeTestSuite.pm
buildverification/smoketest/SyncMLApp/group/bld.inf
buildverification/smoketest/SyncMLApp/scripts/smoketest_syncmlapp.script
buildverification/smoketest/System/Group/Smoketest_System.mmp
buildverification/smoketest/System/Group/bld.inf
buildverification/smoketest/System/Inc/TestSystemBase.h
buildverification/smoketest/System/Src/TestSystemBase.cpp
buildverification/smoketest/System/scripts/smoketest_system.script
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/ConsoleAlarmAlertServer.mmp
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertConsole.h
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertLEDFlasher.h
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServer.h
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServerMain.h
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertSession.h
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertConsole.cpp
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertLEDFlasher.cpp
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServer.cpp
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServerMain.cpp
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertSession.cpp
buildverification/smoketest/Timew/ConsoleAlarmAlertServer/bld.inf
buildverification/smoketest/Timew/Group/Smoketest_Timew.mmp
buildverification/smoketest/Timew/Group/bld.inf
buildverification/smoketest/Timew/Inc/ALMMOD.H
buildverification/smoketest/Timew/Inc/ALMMOD.INL
buildverification/smoketest/Timew/Inc/SM_STD.H
buildverification/smoketest/Timew/Inc/TIMEWMOD.H
buildverification/smoketest/Timew/Inc/TestTimewBase.h
buildverification/smoketest/Timew/Inc/TestTimewServer.h
buildverification/smoketest/Timew/Inc/TestTimewSetAlarm.h
buildverification/smoketest/Timew/Scripts/Smoketest_Timew.script
buildverification/smoketest/Timew/Scripts/setup_Smoketest_Timew.script
buildverification/smoketest/Timew/Src/SM_ALM.CPP
buildverification/smoketest/Timew/Src/SM_MOD.CPP
buildverification/smoketest/Timew/Src/SM_RSP.CPP
buildverification/smoketest/Timew/Src/SM_UTL.CPP
buildverification/smoketest/Timew/Src/TestTimewBase.cpp
buildverification/smoketest/Timew/Src/TestTimewServer.cpp
buildverification/smoketest/Timew/Src/TestTimewSetAlarm.cpp
buildverification/smoketest/Timew/TestData/Smoketest_Timew.ini
buildverification/smoketest/Timew/bmarm/CONSOLEALARMALERTSERVERU.DEF
buildverification/smoketest/Timew/bwins/CONSOLEALARMALERTSERVERU.DEF
buildverification/smoketest/Timew/bwins/SMOKETEST_TIMEW_SERVERU.DEF
buildverification/smoketest/Timew/eabi/ConsoleAlarmAlertServerU.DEF
buildverification/smoketest/Utils/Inc/SmokeTestActive.h
buildverification/smoketest/Utils/Inc/SmokeTestProperty.h
buildverification/smoketest/Utils/Inc/SmokeTestSecureFSclient.h
buildverification/smoketest/Utils/Inc/SmokeTestSecureFSclientserver.h
buildverification/smoketest/Utils/Inc/SmokeTestSecureFSserver.h
buildverification/smoketest/Utils/Inc/SmokeTestTimeOutTimer.h
buildverification/smoketest/Utils/Inc/TestStepSmokeTest.h
buildverification/smoketest/Utils/Src/SmokeTestActive.cpp
buildverification/smoketest/Utils/Src/SmokeTestProperty.cpp
buildverification/smoketest/Utils/Src/SmokeTestSecureFSclient.cpp
buildverification/smoketest/Utils/Src/SmokeTestSecureFSserver.cpp
buildverification/smoketest/Utils/Src/SmokeTestTimeOutTimer.cpp
buildverification/smoketest/Utils/Src/TestStepSmokeTest.cpp
buildverification/smoketest/Utils/bwins/SmokeTestSecureFSClientU.DEF
buildverification/smoketest/Utils/bwins/SmokeTest_UtilsU.DEF
buildverification/smoketest/Utils/eabi/SmokeTestSecureFSclientU.DEF
buildverification/smoketest/Utils/eabi/SmokeTest_UtilsU.DEF
buildverification/smoketest/Utils/group/SmokeTestSecureFSclient.mmp
buildverification/smoketest/Utils/group/SmokeTestSecureFSserver.mmp
buildverification/smoketest/Utils/group/SmokeTest_Utils.mmp
buildverification/smoketest/Utils/group/bld.inf
buildverification/smoketest/agenda/Group/Smoketest_Agenda.mmp
buildverification/smoketest/agenda/Group/bld.inf
buildverification/smoketest/agenda/Inc/TestAgendaAddAppt.h
buildverification/smoketest/agenda/Inc/TestAgendaBase.h
buildverification/smoketest/agenda/Inc/TestAgendaCreateDB.h
buildverification/smoketest/agenda/Inc/TestAgendaServer.h
buildverification/smoketest/agenda/Inc/TestAgendaServerLaunchProgress.h
buildverification/smoketest/agenda/Scripts/Smoketest_Agenda.script
buildverification/smoketest/agenda/Scripts/setup_Smoketest_Agenda.script
buildverification/smoketest/agenda/Src/TestAgendaAddAppt.cpp
buildverification/smoketest/agenda/Src/TestAgendaBase.cpp
buildverification/smoketest/agenda/Src/TestAgendaCreateDB.cpp
buildverification/smoketest/agenda/Src/TestAgendaServer.cpp
buildverification/smoketest/agenda/Src/TestAgendaServerLaunchProgress.cpp
buildverification/smoketest/agenda/Src/sm_agenda.ini
buildverification/smoketest/agenda/TestData/Smoketest_Agenda.ini
buildverification/smoketest/agenda/bwins/SMOKETEST_AGENDA_SERVERU.DEF
buildverification/smoketest/autorom/autoexec.bat
buildverification/smoketest/autorom/build_smoketest_code.mbc
buildverification/smoketest/autorom/dummytest.txt
buildverification/smoketest/autorom/readme.txt
buildverification/smoketest/autorom/smoketest_romspec_9.5.xml
buildverification/smoketest/autorom/smoketest_romspec_9.6.xml
buildverification/smoketest/autorom/smoketest_romspec_future.xml
buildverification/smoketest/autorom/smoketest_romspec_tb101sf.xml
buildverification/smoketest/autorom/smoketest_romspec_tb92sf.xml
buildverification/smoketest/autorom/smoketest_romspec_vFuture.xml
buildverification/smoketest/autorom/smoketests.bat
buildverification/smoketest/autorom/smoketests.oby
buildverification/smoketest/contacts/TestData/Smoketest_Contacts.ini
buildverification/smoketest/contacts/bwins/SMOKETEST_CONTACTS_SERVERU.DEF
buildverification/smoketest/contacts/group/Smoketest_Contacts.mmp
buildverification/smoketest/contacts/group/bld.inf
buildverification/smoketest/contacts/inc/SmoketestContactsServer.h
buildverification/smoketest/contacts/inc/TestContact.h
buildverification/smoketest/contacts/inc/TestContactsAddEntries.h
buildverification/smoketest/contacts/inc/TestContactsBase.h
buildverification/smoketest/contacts/inc/TestContactsCreateDB.h
buildverification/smoketest/contacts/scripts/Smoketest_Contacts.script
buildverification/smoketest/contacts/scripts/setup_Smoketest_Contacts.script
buildverification/smoketest/contacts/src/SmoketestContactsServer.cpp
buildverification/smoketest/contacts/src/TestContact.cpp
buildverification/smoketest/contacts/src/TestContactsAddEntries.cpp
buildverification/smoketest/contacts/src/TestContactsBase.cpp
buildverification/smoketest/contacts/src/TestContactsCreateDB.cpp
buildverification/smoketest/contacts/src/sm_contacts.ini
buildverification/smoketest/messaging/Group/Smoketest_Mess.mmp
buildverification/smoketest/messaging/Group/bld.inf
buildverification/smoketest/messaging/Inc/TestMess.h
buildverification/smoketest/messaging/Inc/TestMessBase.h
buildverification/smoketest/messaging/Inc/TestMessCleanMessageFolder.h
buildverification/smoketest/messaging/Inc/TestMessCreateCdmaSmsUtil.h
buildverification/smoketest/messaging/Inc/TestMessCreateGsmSmsUtil.h
buildverification/smoketest/messaging/Inc/TestMessCreateSMS.h
buildverification/smoketest/messaging/Inc/TestMessCreateSMSaccount.h
buildverification/smoketest/messaging/Inc/TestMessCreateSmsUtilBase.h
buildverification/smoketest/messaging/Inc/TestMessEditEntry.h
buildverification/smoketest/messaging/Inc/TestMessEditEntryUtil.h
buildverification/smoketest/messaging/Inc/TestMessPrintEntryUtil.h
buildverification/smoketest/messaging/Inc/TestMessProcessExistingMsg.h
buildverification/smoketest/messaging/Inc/TestMessProcessor.h
buildverification/smoketest/messaging/Inc/TestMessServer.h
buildverification/smoketest/messaging/Inc/TestMessSession.h
buildverification/smoketest/messaging/Inc/TestMessSetDefaultSc.h
buildverification/smoketest/messaging/Inc/TestMessSharedData.h
buildverification/smoketest/messaging/Inc/TestMessStoreProcessUtil.h
buildverification/smoketest/messaging/Inc/TestMessTimer.h
buildverification/smoketest/messaging/Inc/TestMessWatcher.h
buildverification/smoketest/messaging/Scripts/Smoketest_CreateSmsAccount.script
buildverification/smoketest/messaging/Scripts/Smoketest_Mess.script
buildverification/smoketest/messaging/Scripts/setup_Smoketest_Mess.script
buildverification/smoketest/messaging/Src/TestMessBase.cpp
buildverification/smoketest/messaging/Src/TestMessCleanMessageFolder.cpp
buildverification/smoketest/messaging/Src/TestMessCreateCdmaSmsUtil.cpp
buildverification/smoketest/messaging/Src/TestMessCreateGsmSmsUtil.cpp
buildverification/smoketest/messaging/Src/TestMessCreateSMS.cpp
buildverification/smoketest/messaging/Src/TestMessCreateSMSaccount.cpp
buildverification/smoketest/messaging/Src/TestMessCreateSmsUtilBase.cpp
buildverification/smoketest/messaging/Src/TestMessEditEntry.cpp
buildverification/smoketest/messaging/Src/TestMessEditEntryUtil.cpp
buildverification/smoketest/messaging/Src/TestMessPrintEntryUtil.cpp
buildverification/smoketest/messaging/Src/TestMessProcessExistingMsg.cpp
buildverification/smoketest/messaging/Src/TestMessProcessor.cpp
buildverification/smoketest/messaging/Src/TestMessServer.cpp
buildverification/smoketest/messaging/Src/TestMessSession.cpp
buildverification/smoketest/messaging/Src/TestMessSetDefaultSC.cpp
buildverification/smoketest/messaging/Src/TestMessSharedData.cpp
buildverification/smoketest/messaging/Src/TestMessStoreProcessUtil.cpp
buildverification/smoketest/messaging/Src/TestMessTimer.cpp
buildverification/smoketest/messaging/Src/TestMessWatcher.cpp
buildverification/smoketest/messaging/TestData/Smoketest_Mess.ini
buildverification/smoketest/messaging/TestData/Sms/Message1.txt
buildverification/smoketest/messaging/bwins/SMOKETEST_MESS_SERVERU.DEF
buildverification/smoketest/smoketest_commdb.xml
buildverification/smoketest/xml/smoketest.xml
buildverification/smoketest/xml/smoketest/smoketest_agenda.xml
buildverification/smoketest/xml/smoketest/smoketest_contacts.xml
buildverification/smoketest/xml/smoketest/smoketest_mess.xml
buildverification/smoketest/xml/smoketest/smoketest_phone.xml
buildverification/smoketest/xml/smoketest/smoketest_syncmlapp.xml
buildverification/smoketest/xml/smoketest/smoketest_system.xml
buildverification/smoketest/xml/smoketest/smoketest_timew.xml
buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_agenda_server.xml
buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_contacts_server.xml
buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_mess_server.xml
buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_timew_server.xml
buildverification/smoketest/xml/xml.driver
networkingutils/ipadministrationtool/data/ipadm.rss
networkingutils/ipadministrationtool/data/ipadm_reg.rss
networkingutils/ipadministrationtool/data/route.ini
networkingutils/ipadministrationtool/group/bld.inf
networkingutils/ipadministrationtool/group/ipadm.iby
networkingutils/ipadministrationtool/group/ipadm.mmp
networkingutils/ipadministrationtool/group/networking_ipadm.history.xml
networkingutils/ipadministrationtool/group/networking_ipadm.mrp
networkingutils/ipadministrationtool/inc/engine.h
networkingutils/ipadministrationtool/inc/ipadm.h
networkingutils/ipadministrationtool/inc/ipadm.hrh
networkingutils/ipadministrationtool/inc/uniload.h
networkingutils/ipadministrationtool/src/engine.cpp
networkingutils/ipadministrationtool/src/ipadm.cpp
networkingutils/ipadministrationtool/src/uniload.cpp
networkingutils/nameresolverutility/data/nslookup.rss
networkingutils/nameresolverutility/data/nslookup_reg.rss
networkingutils/nameresolverutility/group/bld.inf
networkingutils/nameresolverutility/group/networking_nslookup.history.xml
networkingutils/nameresolverutility/group/networking_nslookup.mrp
networkingutils/nameresolverutility/group/nslookup.iby
networkingutils/nameresolverutility/group/nslookup.mmp
networkingutils/nameresolverutility/inc/engine.h
networkingutils/nameresolverutility/inc/nslookup.h
networkingutils/nameresolverutility/inc/nslookup.hrh
networkingutils/nameresolverutility/src/engine.cpp
networkingutils/nameresolverutility/src/nslookup.cpp
package_definition.xml
package_definition_v2.xml
techview_info/techview_metadata/techview_metadata.mrp
testapps/rschandler/Common/inc/ResourceHandler.h
testapps/rschandler/Common/inc/ResourceHandler.hrh
testapps/rschandler/Common/inc/ResourceHandler_DataStructs.h
testapps/rschandler/Common/inc/ResourceHandler_Dialogs.h
testapps/rschandler/Common/rsc/ResourceHandler.rss
testapps/rschandler/Common/rsc/ResourceHandler_loc.rss
testapps/rschandler/Common/rsc/ResourceHandler_reg.rss
testapps/rschandler/Common/rsc/ResourceHandleraif.rss
testapps/rschandler/Common/src/ResourceHandler_AppUi.cpp
testapps/rschandler/Common/src/ResourceHandler_Application.cpp
testapps/rschandler/Common/src/ResourceHandler_Dialogs.cpp
testapps/rschandler/Common/src/ResourceHandler_Document.cpp
testapps/rschandler/Common/src/ResourceHandler_Main.cpp
testapps/rschandler/Common/src/ResourceHandler_ResourceDetails.cpp
testapps/rschandler/Common/src/ResourceHandler_ResourceList.cpp
testapps/rschandler/Common/src/ResourceHandler_ResourceView.cpp
testapps/rschandler/TVResourceHandler/group/ABLD.BAT
testapps/rschandler/TVResourceHandler/group/Bld.inf
testapps/rschandler/TVResourceHandler/group/ResourceHandler.mmp
testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_gt.mrp
testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_techview.mrp
testapps/rschandler/TVResourceHandler/group/testtools_resourcehandler_gt.history.xml
testapps/rschandler/TVResourceHandler/group/testtools_resourcehandler_techview.history.xml
testapps/rschandler/TVResourceHandler/inc/ResourceHandlerPlatform.hrh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,28 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// For automated smoketest
+//
+ 
+
+#include "../Utils/group/bld.inf"
+#include "../agenda/Group/bld.inf"
+#include "../contacts/group/bld.inf"
+#include "../messaging/Group/bld.inf"
+#include "../Timew/Group/bld.inf"
+#include "../TestApps/Group/bld.inf"
+
+PRJ_TESTEXPORTS
+../autorom/smoketests.oby	/epoc32/rom/include/smoketests.oby
+ 
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Group/testtools_autosmoketest.mrp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,25 @@
+#
+# 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: 
+#
+
+component	testtools_autosmoketest
+source	\sf\app\techview\buildverification\autosmoketest
+exports \sf\app\techview\buildverification\autosmoketest\Group
+# binary	\sf\app\techview\buildverification\autosmoketest\group	all
+
+notes_source	\component_defs\release.src
+
+ipr T 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/Scripts/smoketest_TestApps.script	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,28 @@
+//
+// 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: 
+//
+// Run smoke test steps to check for successful execution of apps
+
+LOAD_SUITE Smoketest_TestApp_Server
+
+RUN_UTILS MkDir c:\autosmoketest\
+RUN_UTILS CopyFile z:\autosmoketest\smoketest_TestApps.ini c:\autosmoketest\smoketest_TestApps.ini
+ 
+
+START_TESTCASE RUN_PHONE_APP
+RUN_TEST_STEP 100 Smoketest_TestApp_Server TestAppStep1  c:\autosmoketest\smoketest_TestApps.ini PhoneApp  
+END_TESTCASE RUN_PHONE_APP
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+*
+*/
+
+
+PRJ_TESTEXPORTS
+
+../Scripts/smoketest_TestApps.script	/epoc32/release/wins/udeb/z/autosmoketest/smoketest_TestApps.script
+../Scripts/smoketest_TestApps.script	/epoc32/release/wins/urel/z/autosmoketest/smoketest_TestApps.script
+../Scripts/smoketest_TestApps.script	/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_TestApps.script
+../Scripts/smoketest_TestApps.script	/epoc32/release/winscw/urel/z/autosmoketest/smoketest_TestApps.script
+
+../TestData/smoketest_TestApps.ini	/epoc32/release/wins/udeb/z/autosmoketest/smoketest_TestApps.ini
+../TestData/smoketest_TestApps.ini	/epoc32/release/wins/urel/z/autosmoketest/smoketest_TestApps.ini
+../TestData/smoketest_TestApps.ini	/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_TestApps.ini
+../TestData/smoketest_TestApps.ini	/epoc32/release/winscw/urel/z/autosmoketest/smoketest_TestApps.ini
+
+ 
+
+PRJ_TESTMMPFILES
+smoketest_TestApp.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/group/smoketest_TestApp.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* 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: 
+*
+*/
+
+ 
+
+TARGET      Smoketest_TestApp_Server.exe
+TARGETTYPE  exe
+UID             0x1000007A 0x101F777C
+VENDORID 0x70000001
+CAPABILITY PowerMgmt // Required to kill running processes
+
+SOURCEPATH  	..\src
+SOURCE		TestAppServer.cpp
+SOURCE		TestAppStep.cpp  	
+
+USERINCLUDE   	..\inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY     	euser.lib
+LIBRARY		testexecuteutils.lib
+LIBRARY		efsrv.lib
+LIBRARY		testexecutelogclient.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/inc/TestAppServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+*
+*/
+
+ 
+#if (!defined __TESTAPP_SERVER_H__)
+#define __TESTAPP_SERVER_H__
+#include <test/testexecuteserverbase.h>
+
+class CTestAppServer : public CTestServer
+	{
+public:
+	static CTestAppServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	//RFs& Fs(){return iFs;};
+
+private:
+	//RFs iFs;
+	};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/inc/TestAppStep.h	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+*
+*/
+
+#if (!defined __TESTAPP_STEP_H__)
+#define __TESTAPP_STEP_H__
+#include <test/testexecutestepbase.h>
+#include "TestAppServer.h"
+
+ 
+_LIT(KSampleStep1,"TestAppStep1");
+
+class CTestAppStep1 : public CTestStep
+	{
+public:
+	CTestAppStep1();
+	~CTestAppStep1();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+private:
+	};
+
+ 
+ 
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/src/TestAppServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* 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 "TestAppServer.h"
+#include "TestAppStep.h"
+
+ 
+_LIT(KServerName,"Smoketest_TestApp_Server");
+ 
+CTestAppServer* CTestAppServer::NewL()
+/**
+ * @return - Instance of the test server
+ * Called inside the MainL() function to create and start the
+ * CTestServer derived server.
+ */
+	{
+	CTestAppServer * server = new (ELeave) CTestAppServer();
+	CleanupStack::PushL(server);
+	
+	server-> ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+ 
+LOCAL_C void MainL()
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	 
+	CTestAppServer* server = NULL;
+	TRAPD(err,server = CTestAppServer::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 exit
+ */
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());
+	delete cleanup;
+	return KErrNone;
+    }
+
+ 
+CTestStep* CTestAppServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ */
+	{
+	CTestStep* testStep = NULL;
+	 
+	if(aStepName == KSampleStep1)
+		testStep = new CTestAppStep1();
+	 
+	return testStep;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/src/TestAppStep.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,157 @@
+/*
+* 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 "TestAppStep.h"
+
+
+CTestAppStep1::~CTestAppStep1()
+/**
+ * Destructor
+ */
+	{
+	}
+
+CTestAppStep1::CTestAppStep1()
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KSampleStep1);
+	}
+
+TVerdict CTestAppStep1::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ */
+	{
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestAppStep1::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Smoke test step for a techview application.
+ * Retrieves an exe name and corresponding uid from the config file.
+ * Runs the exe. Delays for 20 secs. Checks that the exe is still running.
+ */
+	{
+	INFO_PRINTF1(_L("In Test Step CTestAppStep1"));
+	SetTestStepResult(EFail);
+
+  	// Get the name of the app to run from the .ini configuration file.	
+	TPtrC exeToRun;
+  	_LIT(KExeName, "exename");
+  	GetStringFromConfig(ConfigSection(),KExeName,exeToRun);
+  	INFO_PRINTF2(_L("The exe to run is %S"), &exeToRun);
+  	  
+  	// Create a new process to run the executable in
+  	RProcess testProcess;	 
+  	if(testProcess.Create(exeToRun, KNullDesC()) == KErrNone)
+  		{testProcess.Resume();}
+  	else 
+  		{return TestStepResult();}
+
+  	// Retrieve the UID of the app in order to check that it is running.
+  	TInt uidValue;
+  	_LIT(KUidKey, "uid");
+  	if (!GetHexFromConfig(ConfigSection(), KUidKey, uidValue))
+  		{
+  	  	ERR_PRINTF1(_L("Cannot read UID from config section."));	  
+  	  	return TestStepResult();
+  	  	}
+  	TUid exeUid;
+  	exeUid.iUid = uidValue;	   
+  	  	 
+  	// In order to test this test code the process can be forced to panic
+  	// _LIT(KTestPanic, "test panic");
+  	// testProcess.Panic(KTestPanic, 123);
+  	
+  	// Make sure app has stayed up for at least 20 secs
+  	User::After(2000000);
+  	INFO_PRINTF2(_L("Check that %S is still running after at least 20 seconds"), &exeToRun); 
+  	 
+    // Loop through each process (match against default of *)
+  	TFindProcess findProcess;
+  	TFullName fullName;
+  	
+   
+  	while((findProcess.Next(fullName) == KErrNone)) //&& (TestStepResult() == EFail))
+  		{
+  		RProcess process;
+  		TInt ret=KErrNone;
+  		TInt count=0;
+  		
+  		// Open a handle to the process
+  		do
+  			{
+  			//INFO_PRINTF2(_L("process running is %S"), &fullName); 
+  			count++;
+  	 		ret=process.Open(findProcess);
+  			if (ret!=KErrNone)
+  				{
+  				User::After(200000);
+  				}
+  			}while (ret!=KErrNone && count<=10);
+  			
+  		if (ret!=KErrNone)
+  			{
+  			User::Leave(ret);
+  			}
+  		
+  		// Extract any panic characteristics
+  		TUidType uid = process.Type();
+  		TExitType exitType = process.ExitType();
+  		TExitCategoryName exitCategory = process.ExitCategory();
+  		TInt exitReason = process.ExitReason();
+  		process.Close();
+  		
+  		// If the uid being searched for is found and is running set the test step result to
+  		// pass.
+  		if(uid[2] == exeUid)
+  			{
+  			if (exitType == EExitPending)
+  				{
+  				INFO_PRINTF2(_L("A running process has been found with UID 0x%x"), exeUid );
+  				SetTestStepResult(EPass);
+  				}
+  			else {
+  				if (exitType == EExitPanic) //print for debugging purposes
+  					{
+  					INFO_PRINTF2(_L("The process with UID 0x%x has exited due to a panic"), exeUid );
+  					INFO_PRINTF3(_L("The exit Reason is %d, The exit category is \"%S\""), exitReason, &exitCategory);				 
+  					}
+  				 }
+  			} // uid[2] == exeUid				 	 
+  	} // while	  	  
+  	 
+  	// clean up 
+  	testProcess.Kill(KErrNone);
+  	testProcess.Close();
+  		
+	return TestStepResult();
+	}
+
+TVerdict CTestAppStep1::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/TestApps/testdata/smoketest_TestApps.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,3 @@
+[PhoneApp]
+uid=101F7858
+exename=Z:\sys\bin\phone.exe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/ConsoleAlarmAlertServer.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,46 @@
+// Copyright (c) 1999-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:
+//
+
+TARGET					ConsoleAlarmAlertServer.dll
+TARGETTYPE				dll
+CAPABILITY   All -TCB
+UID						0x1000008D	0x101F502A
+VENDORID 0x70000001
+
+SOURCEPATH				..\ConsoleAlarmAlertServer\Source
+
+SOURCE					ConsoleAlarmAlertServer.cpp
+SOURCE					ConsoleAlarmAlertSession.cpp
+SOURCE					ConsoleAlarmAlertConsole.cpp
+SOURCE					ConsoleAlarmAlertServerMain.cpp
+SOURCE					ConsoleAlarmAlertLEDFlasher.cpp
+
+USERINCLUDE				..\ConsoleAlarmAlertServer\Include
+//USERINCLUDE				..\AlarmAlert\Shared
+//USERINCLUDE				..\Shared\Include
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY					euser.lib
+LIBRARY					hal.lib
+LIBRARY					AlarmShared.lib
+
+DEFFILE					ConsoleAlarmAlertServer.DEF
+
+START WINS
+	baseaddress			0x40700000
+END
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertConsole.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTCONSOLE_H__
+#define __CONSOLEALARMALERTCONSOLE_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "asaltdefs.h"
+
+// Type definitions
+
+// Constants
+
+// Classes referenced
+class CConsoleAlarmAlertSession;
+
+// Enumerations
+
+
+//
+// ----> CConsoleAlarmAlertConsole (header)
+//
+class CConsoleAlarmAlertConsole : public CActive
+	{
+//
+public:										// CONSTRUCT / DESTRUCT
+//
+	CConsoleAlarmAlertConsole(CConsoleAlarmAlertSession& aSession);
+	~CConsoleAlarmAlertConsole();
+
+//
+public:										// ACCESS
+//
+	void									GetKey();
+	void									CancelKey();
+	void									DecCounter();
+	void									UpdateDisplay();
+	TInt									GetTimeInterval() const;
+	void									SetVisibility(TInt aVis);
+	void									SetAlertState(TInt aFlags);
+
+//
+protected:									// FROM CActive
+//
+	void									RunL();
+	void									DoCancel();
+
+//
+protected:									// INTERNAL METHODS
+//
+	void									Hide();
+	void									CreateWin();
+	void									DoDeferTime(TASAltAlertServerResponse aResponse);
+
+	static TBool							CountDownCallBack(TAny* aSelf);
+
+//
+private:									// MEMBER DATA
+//
+
+	TInt									iAlertState;
+
+	TInt									iTimeInterval;
+
+	CPeriodic*								iCountDown;
+
+	CConsoleBase*							iWin;
+
+	CConsoleAlarmAlertSession&				iSession;
+
+	friend class							CConsoleAlarmAlertSession;
+
+	TInt									iInstructionIndex;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertLEDFlasher.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,75 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTLEDFLASHER_H__
+#define __CONSOLEALARMALERTLEDFLASHER_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertLEDFlasher (header)
+//
+class CConsoleAlarmAlertLEDFlasher : public CTimer
+	{
+//
+public:										// STATIC CONSTRUCT
+//
+	static CConsoleAlarmAlertLEDFlasher*	NewL();
+
+//
+private:									// INTERNAL CONSTRUCT
+//
+	CConsoleAlarmAlertLEDFlasher();
+
+//
+public:										// ACCESS
+//
+
+	TInt									Start();
+
+	void									Stop();
+
+//
+private:									// FROM CActive
+//
+
+	void									RunL();
+
+//
+private:									// INTERNAL
+//
+
+	TInt									SetRedLedOn(TBool aOn);
+
+//
+private:									// MEMBER DATA
+//
+
+	TBool									iLedOn;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,87 @@
+// Copyright (c) 1999-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:
+// TALARMALERTSERVER.H
+// 
+//
+
+#ifndef __CONSOLEALARMALERTSERVER_H__
+#define __CONSOLEALARMALERTSERVER_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+class CTestAlarmAlertConsole;
+class CConsoleAlarmAlertSession;
+
+//
+// ----> CConsoleAlarmAlertServer (header)
+//
+class CConsoleAlarmAlertServer : public CPolicyServer
+	{
+//
+public:										// STATIC CONSTRUCT / DESTRUCT
+//
+	static CConsoleAlarmAlertServer*		NewLC();
+	~CConsoleAlarmAlertServer();
+
+public:
+	inline void								AddResponseArray(TAny* aResponseArray);
+	void									SetAttachment(HBufC8* aData);
+	inline HBufC8*							Attachment() const;
+	inline TAny*							ResponseArray() const;
+	inline CConsoleAlarmAlertSession*		WaitingSession() const;
+	inline void								SetNotifying(TBool aIsNotifying);
+	inline TBool							IsNotifying() const;
+//
+private:									// INTERNAL CONSTRUCT
+//
+	CConsoleAlarmAlertServer();
+	void									ConstructL();
+
+//
+public:										// FROM CServer2
+//
+	CSession2*								NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+
+//
+private:									// FROM CActive
+//
+	TInt									RunError(TInt aError);
+
+//
+private:									// MEMBER DATA
+//
+	TAny*									iInstructionSet;
+	HBufC8*									iAttachment;
+	CConsoleAlarmAlertSession*				iWaitingSession;
+	TBool									iIsNotifying;
+	};
+
+// inline functions
+void CConsoleAlarmAlertServer::AddResponseArray(TAny* aResponseArray)		{ iInstructionSet = aResponseArray; }
+HBufC8* CConsoleAlarmAlertServer::Attachment() const						{ return iAttachment; }
+TAny* CConsoleAlarmAlertServer::ResponseArray() const						{ return iInstructionSet; }
+CConsoleAlarmAlertSession* CConsoleAlarmAlertServer::WaitingSession() const	{ return iWaitingSession; }
+void CConsoleAlarmAlertServer::SetNotifying(TBool aIsNotifying)				{ iIsNotifying = aIsNotifying; }
+TBool CConsoleAlarmAlertServer::IsNotifying()	const						{ return iIsNotifying; }
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServerMain.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTSERVERMAIN_H__
+#define __CONSOLEALARMALERTSERVERMAIN_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> ConsoleAlarmAlertServer (header)
+//
+class ConsoleAlarmAlertServer
+/**
+@internalAll
+@released
+*/
+	{
+//
+public:										// ACCESS
+//
+	IMPORT_C static void					StartConsoleAlarmAlertServerL(TAny* instructionSet = NULL);
+
+//
+private:									// INTERNAL
+//
+	static TInt								StartServerThreadFunction(TAny* instructionSet = NULL);
+	static void								StartServerL(TAny* instructionSet = NULL);
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertSession.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,137 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTSESSION_H__
+#define __CONSOLEALARMALERTSESSION_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "asaltdefs.h"
+#include "asshdalarm.h"
+
+// Type definitions
+
+// Constants
+
+// Classes referenced
+class CConsoleAlarmAlertConsole;
+class CConsoleAlarmAlertLEDFlasher;
+class CConsoleAlarmAlertServer;
+// Enumerations
+
+
+struct TAgnAlarmInfo
+	/**
+	Copy of System-Wide Unique Agenda Entry Reference defined in agmalarm.h
+	*/
+	{
+	TUid iAlarmCategory;
+	TUint32 iAgnUniqueId;
+	TFileName iFileName;
+	};
+
+//
+// ----> CConsoleAlarmAlertSession (header)
+//
+class CConsoleAlarmAlertSession : public CSession2
+	{
+//
+public:										// STATIC CONSTRUCT / DESTRUCT
+//
+	static CConsoleAlarmAlertSession*		NewL(CConsoleAlarmAlertServer* aServer);
+	~CConsoleAlarmAlertSession();
+
+//
+private:									// INTERNAL CONSTRUCT
+//
+	CConsoleAlarmAlertSession(CConsoleAlarmAlertServer* aServer);
+	void									ConstructL();
+
+//
+public:										// ACCESS
+//
+
+	TTime									DeferTime() const;
+
+	inline const TASShdAlarm& 				Alarm() const { return iAlarm; }
+
+	inline TInt								AlarmDataSize() const { return iAlarmAssociatedDataSize; }
+
+	inline const TAgnAlarmInfo&				AlarmData() const { return iAlarmData; }
+
+	void									Notify(TASAltAlertServerResponse aFlag);
+
+	void									Notify(TASAltAlertServerResponse aFlag, const TTime& aDeferTime);
+
+	TAny *									InstructionSet();
+
+//
+private:									// FROM CSession2
+//
+	void									ServiceL(const RMessage2& aMessage);
+
+//
+private:									// CMD - DEBUG ONLY
+//
+	TBool									CmdL();
+
+//
+private:									// INTERNAL METHODS
+//
+
+	void									SetAlarmL(const RMessage2& aMessage);
+
+	void									GetUserTimeL(const RMessage2& aMessage);
+
+	void									SetDeferTimeL(const RMessage2& aMessage);
+
+	static TBool							SoundPlaybackCallbackL(TAny* aSelf);
+
+//
+private:									// MEMBER DATA
+//
+
+	TTime									iDeferTime;
+
+	TASShdAlarm								iAlarm;
+
+	TInt									iAlarmAssociatedDataSize;
+
+	TAgnAlarmInfo							iAlarmData;
+
+	TBool									iLoggedOn;
+
+	TBool									iHasMessage;
+
+	TBool									iMsgComplete;
+
+	RMessage2								iMsgPtr;
+
+	CPeriodic*								iSoundCallbackTimer;
+
+	CConsoleAlarmAlertLEDFlasher*			iSoundLEDFlasher;
+
+	CConsoleAlarmAlertConsole*				iConsole;
+
+	CConsoleAlarmAlertServer*				iServer;
+
+	TAny*									iInstructionSet;
+
+	TBool									iInstructionSetFound;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertConsole.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,404 @@
+// Copyright (c) 1999-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 "consolealarmalertconsole.h"
+
+// System includes
+#include <e32twin.h>
+#include <e32base.h>
+#include <e32svr.h>
+
+// User includes
+#include "asaltdefs.h"
+#include "consolealarmalertsession.h"
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertConsole (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertConsole::CConsoleAlarmAlertConsole(CConsoleAlarmAlertSession& aSession)
+:	CActive(CActive::EPriorityLow), iSession(aSession), iInstructionIndex(0)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertConsole::~CConsoleAlarmAlertConsole()
+	{
+	Cancel();
+	Hide();
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::GetKey()
+	{
+	if	(iWin && !IsActive())
+		{
+		SetActive();
+		iWin->Read(iStatus);
+		}		
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::CancelKey()
+	{
+	if	(IsActive())
+		Cancel();
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DecCounter()
+	{
+	if	(iTimeInterval > 0)
+		{
+		--iTimeInterval;
+		UpdateDisplay();
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::UpdateDisplay()
+	{
+	TBuf<180> buf;
+	_LIT(KEalwlAlarmSoundOff, "Off");
+	_LIT(KEalwlAlarmSoundOn, "On");
+	_LIT(KEalwlStatusEnabled, "Are");
+	_LIT(KEalwlStatusNotEnabled, "Are Not");
+	_LIT(KEalwlStatusIs, "Is");
+	_LIT(KEalwlStatusIsNo, "Is No");
+	//
+	if	(!iWin)
+		return;
+	iWin->SetCursorPosAbs(TPoint(0,0));
+
+	// MESSAGE
+	buf.Format(_L("Message : %S"), &iSession.Alarm().Message());
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// DATA
+	if	(iSession.Alarm().HasAssociatedData())
+		{
+		const TAgnAlarmInfo data = iSession.AlarmData();
+		const TUid KUidAgendaModelAlarmCategory = { 0x101F4A70 };
+		if (data.iAlarmCategory == KUidAgendaModelAlarmCategory)
+			{
+			_LIT(KEalwlAgendaData,"\ndata: agenda filename \"%S\"");
+			if (data.iFileName.Length() < 40)
+				buf.Format(KEalwlAgendaData,&data.iFileName);
+			else
+				{
+				TBuf<40> temp = data.iFileName.Left(40);
+				buf.Format(KEalwlAgendaData,&temp);
+				}
+			}
+		else
+			buf.Format(_L("\nAlarm has %d data bytes"), iSession.AlarmDataSize());
+		}
+	else
+		{
+		buf = _L("\nAlarm has no associated data");
+		}
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// DEFER TIME
+	if	(iSession.DeferTime() != Time::NullTTime())
+		{
+		TDateTime dateTime(iSession.DeferTime().DateTime());
+		buf.Format(_L("\nDefer   : %02d:%02d"), dateTime.Hour(), dateTime.Minute());
+		}
+	else
+		buf=_L("\nNULL defer time");
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// TIME INTERVAL
+	buf.Format(_L("\nCurrent time interval is %d minutes"), GetTimeInterval());
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// STATE FLAGS
+	buf.Format(_L("\nAlarm sounds are %S"),(iAlertState&EASAltStateFlagsSilentRunning)?&KEalwlAlarmSoundOff:&KEalwlAlarmSoundOn);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nAlarm sounds %S paused"),(iAlertState&EASAltStateFlagsSoundIsPaused)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nAlarm sounds %S deferred"),(iAlertState&EASAltStateFlagsInQuietPeriod)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S more than one unacknowledged alarms"),(iAlertState&EASAltStateFlagsMoreThanOneDueAlarm)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S memory to snooze alarms"),(iAlertState&EASAltStateFlagsNoMemoryForSnoozeAlarm)?&KEalwlStatusIsNo:&KEalwlStatusIs);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S an alarm sound to play"),(iAlertState&EASAltStateFlagsAlarmHasNoSoundFileName)?&KEalwlStatusIsNo:&KEalwlStatusIs);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// COMMAND PROMPTS
+	iWin->Write(_L("\nENTER = Silence alarm          SPACE = Quiet Period"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\nESCAPE = Acknowledge alarm     A = Acknowledge all"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\nP = Pause alarm sound          TAB = Snooze alarm"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n1 = 1 min sound interval		 0 = 0 mins sound interval"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n+ = Increase int. and pause    - = Decrease int. and pause"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n! = Kill alarm alert server"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\r"));
+	//
+	if(!iSession.InstructionSet()) //Get user input if instruction set unspecified.
+		GetKey();
+	else if (iInstructionIndex >= static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count()) //Get user input if program has already iterated thru entire instruction set.
+		GetKey();
+	else //Use the command in the instruction set, instead of waiting for user input.
+		{
+			if(!IsActive())
+			{
+			iStatus = KRequestPending;
+			TRequestStatus* ptrStatus = &iStatus;
+			User::RequestComplete( ptrStatus, KErrNone );
+			SetActive();
+			}
+		}
+	}
+
+//*************************************************************************************
+TInt CConsoleAlarmAlertConsole::GetTimeInterval() const
+	{
+	return(iTimeInterval);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::SetVisibility(TInt aVis)
+	{
+	if	(!aVis)
+		Hide();
+	else if (!iWin)
+		{
+		// Create a new window, since cannot set order of console windows
+		CreateWin();
+		UpdateDisplay();
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::SetAlertState(TInt aFlags)
+	{
+	iAlertState = aFlags;
+	UpdateDisplay();
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::RunL()
+	{
+	if (iStatus.Int() == KErrCancel)
+		return;
+
+	__ASSERT_DEBUG(iWin, User::Invariant());
+	TInt key = iWin->KeyCode();
+	if(iSession.InstructionSet() && iInstructionIndex < static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count())
+		{
+		RArray<TInt>* temp = static_cast<RArray<TInt>*>(iSession.InstructionSet());
+		key = (*temp)[iInstructionIndex++];
+		GetKey();
+		}
+	else
+		{
+		GetKey();
+		if ((key>=EKeyF1 && key<=EKeyF12) || key==EKeyTab)
+			{
+			DoDeferTime(EASAltAlertServerResponseSnooze);
+			}
+		}
+
+	switch (key)
+		{
+	// ACKNOWLEDGE CURRENT
+	case EKeyEscape:
+		iSession.Notify(EASAltAlertServerResponseClear);
+		return;
+	// ACKNOWLEDGE ALL
+	case 'a':
+	case 'A':
+		iSession.Notify(EASAltAlertServerResponseClearAll);
+		return;
+	// QUIET PERIOD
+	case EKeySpace:
+		DoDeferTime(EASAltAlertServerResponseQuietPeriod);
+		break;
+	// PAUSE SOUND
+	case 'p':
+	case 'P':
+		DoDeferTime(EASAltAlertServerResponsePauseSound);
+		break;
+	// SILENCE ALL SOUND
+	case EKeyEnter:
+		iSession.Notify(EASAltAlertServerResponseSilence);
+		break;
+	// INTERVAL 1 MINUTE
+	case '1':
+		iTimeInterval=1;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// INTERVAL 0 MINUTES
+	case '0':
+		iTimeInterval=0;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// PAUSE +
+	case '=':
+	case '+':
+		iTimeInterval++;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// PAUSE -
+	case '-':
+		iTimeInterval--;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+
+	// QUIT
+	case '!':
+		CActiveScheduler::Stop();
+		break;
+		}
+
+	TBuf<10> buf;
+	buf.Format(_L("'%c',"), key);
+	iWin->Write(buf);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DoCancel()
+	{
+	__ASSERT_DEBUG(iWin, User::Invariant());
+	iWin->ReadCancel();
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::Hide()
+	{
+	if	(iWin)
+		CancelKey(); 
+	//
+	delete iWin;
+	iWin = NULL;
+	//
+	if	(iCountDown)
+		iCountDown->Cancel();
+	//
+	delete iCountDown;
+	iCountDown=NULL;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::CreateWin()
+	{
+	_LIT(KAlarmAlertConsoleCaption, "Test Alarm Alert Server Console");
+	//
+	__ASSERT_DEBUG(!iWin, User::Invariant());
+	__ASSERT_DEBUG(!iCountDown, User::Invariant());
+	//
+	TRAPD(trapCheck, iWin = Console::NewL(KAlarmAlertConsoleCaption, TSize(KConsFullScreen, KConsFullScreen)));
+	if	(trapCheck)
+		{
+		iWin=NULL;
+		return;
+		}
+	
+	TRAP(trapCheck, iCountDown = CPeriodic::NewL(CActive::EPriorityIdle));
+	if	(trapCheck)
+		{
+		iCountDown=NULL;
+		return;
+		}
+	//
+	const TTimeIntervalMicroSeconds32 interval(60000000);
+	iCountDown->Start(interval, interval, TCallBack(&CountDownCallBack, this));
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DoDeferTime(TASAltAlertServerResponse aResponse)
+	{
+	if	(++iTimeInterval > 60)
+		{
+		iTimeInterval = 5;
+		User::Beep(440, 12);
+		}
+	//
+	TTime now;
+	now.HomeTime();
+	now += TTimeIntervalMinutes(iTimeInterval);
+	//
+	iSession.Notify(aResponse, now);
+	}
+
+
+//*************************************************************************************
+TBool CConsoleAlarmAlertConsole::CountDownCallBack(TAny* aSelf)
+	{
+	CConsoleAlarmAlertConsole& self = *reinterpret_cast<CConsoleAlarmAlertConsole*>(aSelf);
+	self.DecCounter();
+	//
+	return EFalse;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertLEDFlasher.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,130 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "consolealarmalertledflasher.h"
+
+// System includes
+#include <hal.h>
+
+// User includes
+#include "asaltdefs.h"
+
+// Type definitions
+
+// Constants
+const TInt KFlasherPeriodicity = 500000;
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertLEDFlasher (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertLEDFlasher::CConsoleAlarmAlertLEDFlasher()
+:	CTimer(CActive::EPriorityIdle)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertLEDFlasher* CConsoleAlarmAlertLEDFlasher::NewL()
+	{
+	CConsoleAlarmAlertLEDFlasher* self = new(ELeave) CConsoleAlarmAlertLEDFlasher();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+/**
+ * Start the flasher, if not busy
+ */
+TInt CConsoleAlarmAlertLEDFlasher::Start()
+	{
+	Stop();
+	After(KFlasherPeriodicity);
+	return(SetRedLedOn(ETrue));
+	}
+
+
+//*************************************************************************************
+/**
+ * Stop the LED flashing
+ */
+void CConsoleAlarmAlertLEDFlasher::Stop()
+	{
+	Cancel();
+	SetRedLedOn(EFalse);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+/**
+ * @see CActive
+ */
+void CConsoleAlarmAlertLEDFlasher::RunL()
+	{
+	if (iStatus!=KErrNone)
+		{
+		SetRedLedOn(EFalse);
+		return;
+		}
+	SetRedLedOn(!iLedOn);
+	After(KFlasherPeriodicity);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+/**
+ * Turn the LED on or off
+ */
+TInt CConsoleAlarmAlertLEDFlasher::SetRedLedOn(TBool aOn)
+	{
+	const TInt KClearAllLeds = 0;
+	const TInt KLedMaskRed1 = 1;
+
+	iLedOn = aOn;
+	if (iLedOn)
+		{
+		return HAL::Set(HAL::ELEDmask, KLedMaskRed1);
+		}
+	else
+		{
+		return HAL::Set(HAL::ELEDmask, KClearAllLeds);
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,131 @@
+// Copyright (c) 1999-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 "consolealarmalertserver.h"
+
+// System includes
+
+// User includes
+#include "asaltdefs.h"
+//
+#include "consolealarmalertsession.h"
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+// The Console Alarm Alert Server is migrated to a secure server in EKA2
+#include <e32base.h>
+
+
+
+const TUint KRangeCount = 1; 
+
+const TInt KOpCodeRanges[KRangeCount] = 
+	{	
+	0 // All Op Codes  from 0 to KMaxInt should pass. No restrictions	
+	};
+
+
+const TUint8 KElementsIndex[KRangeCount] =
+	{
+	CPolicyServer::EAlwaysPass, 	//All OP Codes Allways passing no capability required 
+	};
+
+
+const CPolicyServer::TPolicy KConsoleAlarmAlertServerPolicy =
+	{
+	CPolicyServer::EAlwaysPass, //specifies all connect attempts should pass
+	KRangeCount,
+	KOpCodeRanges,
+	KElementsIndex, 	// what each range is compared to 
+	KNullHandle			//Since we have no specific policy checking
+	};
+ 	
+
+
+//
+// ----> CConsoleAlarmAlertServer (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertServer::CConsoleAlarmAlertServer()
+ 	:CPolicyServer(CActive::EPriorityStandard, KConsoleAlarmAlertServerPolicy), iInstructionSet(NULL)
+	{
+	}
+
+
+
+//*************************************************************************************
+CConsoleAlarmAlertServer::~CConsoleAlarmAlertServer()
+	{
+	if (iAttachment)
+		delete iAttachment;	
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertServer::ConstructL()
+	{
+	StartL(KAlarmAlertServerName);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertServer* CConsoleAlarmAlertServer::NewLC()
+	{
+	CConsoleAlarmAlertServer* self = new(ELeave) CConsoleAlarmAlertServer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+//
+//
+//
+
+
+//*************************************************************************************
+CSession2* CConsoleAlarmAlertServer::NewSessionL(const TVersion& aVersion,const RMessage2& /*aMessage*/) const
+	{
+	const TVersion KServerVersion(KASAltVersionMajor, KASAltVersionMinor, KASAltVersionBuild);
+	if	(!User::QueryVersionSupported(KServerVersion, aVersion))
+		User::Leave(KErrNotSupported);
+	//
+	return CConsoleAlarmAlertSession::NewL((CConsoleAlarmAlertServer*)this);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TInt CConsoleAlarmAlertServer::RunError(TInt /*Error*/)
+	{
+	return KErrNone;
+	}
+
+void CConsoleAlarmAlertServer::SetAttachment(HBufC8* data)
+	{
+	if (iAttachment)
+		delete iAttachment;
+	iAttachment = data;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServerMain.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,117 @@
+// Copyright (c) 1999-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 "consolealarmalertservermain.h"
+
+// System includes
+
+// User includes
+#include "asaltdefs.h"
+//
+#include "consolealarmalertserver.h"
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> ConsoleAlarmAlertServer (source)
+//
+
+//*************************************************************************************
+EXPORT_C void ConsoleAlarmAlertServer::StartConsoleAlarmAlertServerL(TAny* instructionSet)
+	{
+	_LIT(KAlarmAlertServerThreadName, "ConsoleAlarmAlertServerThread");
+	//
+	const TInt KStackSize		= 0x0002000;	//  8KB
+	const TInt KInitHeapSize	= 0x0001000;	//  4KB
+	const TInt KHeapSize		= 0x1000000;	// 16MB
+	//
+	// Is the alarm alert server already running? If so, don't
+	// start a new one...
+	TFullName name;
+	TFindServer finder(KAlarmAlertServerName);
+	if	(finder.Next(name) == KErrNone)
+		return;
+	
+	RThread serverThread;
+	const TInt error = serverThread.Create(KAlarmAlertServerThreadName,
+										   &StartServerThreadFunction,
+										   KStackSize,
+										   KInitHeapSize,
+										   KHeapSize,
+										   instructionSet
+										  );
+	User::LeaveIfError(error);
+	//
+	serverThread.SetPriority(EPriorityMore);
+	serverThread.Resume();
+	//
+	User::After(2000000); // 2 seconds
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TInt ConsoleAlarmAlertServer::StartServerThreadFunction(TAny* instructionSet)
+	{
+	__UHEAP_MARK;
+	//
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if	(!cleanup)
+		User::Invariant();
+	//
+	TRAPD(err, StartServerL(instructionSet));
+	delete cleanup;
+	//
+	__UHEAP_MARKEND;
+	return err;
+	}
+
+
+//*************************************************************************************
+void ConsoleAlarmAlertServer::StartServerL(TAny* instructionSet)
+	{
+	CActiveScheduler* scheduler = new CActiveScheduler();
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install(scheduler);
+	//
+
+	CConsoleAlarmAlertServer * tmp = CConsoleAlarmAlertServer::NewLC();
+	tmp->AddResponseArray(instructionSet);
+	CActiveScheduler::Start();
+	//
+	CleanupStack::PopAndDestroy(2, scheduler);
+	}
+
+
+
+
+
+
+//
+// ----> ConsoleAlarmAlertServer (source)
+//
+
+//*************************************************************************************
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertSession.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,335 @@
+// Copyright (c) 1999-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 "consolealarmalertsession.h"
+
+// System includes
+
+#include "e32svr.h"
+// User includes
+#include "asaltdefs.h"
+//#include "..\..\Test\ConsoleANTestClient.h"
+//
+#include "consolealarmalertsession.h"
+#include "consolealarmalertconsole.h"
+#include "consolealarmalertledflasher.h"
+#include "consolealarmalertserver.h" //for inter-session communication
+
+// Type definitions
+
+// Constants
+const TInt KSlot0 = 0;
+const TInt KSlot1 = 1;
+const TInt KSlot2 = 2;
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertSession (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertSession::CConsoleAlarmAlertSession(CConsoleAlarmAlertServer* aServer)
+:	iServer(aServer), iInstructionSet(NULL), iInstructionSetFound(EFalse)
+	{
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertSession::~CConsoleAlarmAlertSession()
+	{
+	CConsoleAlarmAlertSession* session = iServer->WaitingSession();
+	session = NULL;
+	delete iSoundLEDFlasher;
+	delete iSoundCallbackTimer;
+	delete iConsole;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::ConstructL()
+	{
+	iSoundLEDFlasher = CConsoleAlarmAlertLEDFlasher::NewL();
+	iSoundCallbackTimer = CPeriodic::NewL(CActive::EPriorityIdle);
+	iConsole = new(ELeave) CConsoleAlarmAlertConsole(*this);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertSession* CConsoleAlarmAlertSession::NewL(CConsoleAlarmAlertServer* aServer)
+	{
+	CConsoleAlarmAlertSession* self = new(ELeave) CConsoleAlarmAlertSession(aServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TTime CConsoleAlarmAlertSession::DeferTime() const
+	{
+	return iDeferTime;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::Notify(TASAltAlertServerResponse aFlag)
+	{
+	if	(iHasMessage)
+		{
+		iMsgPtr.Complete(aFlag);
+		iHasMessage = EFalse;
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::Notify(TASAltAlertServerResponse aFlag, const TTime& aDeferTime)
+	{
+	if	(iHasMessage)
+		{
+		TPckgC<TTime> time(aDeferTime);
+		TRAPD(err, iMsgPtr.WriteL(KSlot0, time));
+		__ASSERT_DEBUG(err == KErrNone, User::Invariant());
+		Notify(aFlag);
+		}
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::ServiceL(const RMessage2& aMessage)
+	{
+	iMsgComplete = ETrue;
+	const TInt function = aMessage.Function();
+
+	//see if the server holds a set of instructions to be followed,
+	//rather than waiting for user input.
+	if(!iInstructionSetFound) //go look for it now.
+		{
+		//we will enter into this code only once
+		const CServer2* tmpServ = Server();
+		const CConsoleAlarmAlertServer* specific = reinterpret_cast<const CConsoleAlarmAlertServer*>(tmpServ);
+		iInstructionSet = const_cast<CConsoleAlarmAlertServer*>(specific)->ResponseArray();
+		iInstructionSetFound = ETrue;
+		}
+
+	//
+	switch(function)
+		{
+    case EASAltOpCodeNotify:
+    	{
+		__ASSERT_ALWAYS(!iHasMessage, User::Invariant());
+		iMsgComplete = EFalse;
+		iMsgPtr = aMessage;
+		iHasMessage = ETrue;
+		CConsoleAlarmAlertSession* session = iServer->WaitingSession();
+		session = this;
+		break;
+		}
+
+    case EASAltOpCodeNotifyCancel:
+		if	(iHasMessage)
+			{
+			iHasMessage=EFalse;
+			iMsgPtr.Complete(KErrCancel);
+			}
+		break;
+
+	case EASAltOpCodeVisible:
+		{
+		TBool isVisible = aMessage.Int0();
+		iConsole->SetVisibility(isVisible);
+		iServer->SetNotifying(isVisible);
+		break;
+		}
+
+    case EASAltOpCodeSetState:
+		iConsole->SetAlertState(aMessage.Int0());
+		break;
+
+    case EASAltOpCodeSetAlarm:
+		SetAlarmL(aMessage);
+		iConsole->iTimeInterval=0;
+		iConsole->UpdateDisplay();
+		break;
+
+	case EASAltOpCodeGetUserTime:
+		GetUserTimeL(aMessage);
+		break;
+
+	case EASAltOpCodeSetDeferTime:
+		SetDeferTimeL(aMessage);
+		iConsole->UpdateDisplay();
+		break;
+
+    case EASAltOpCodeLogon:
+		__ASSERT_ALWAYS(!iLoggedOn, User::Invariant());
+		iMsgComplete=EFalse;
+		iLoggedOn=ETrue;
+		break;
+
+	case EASAltOpCodeStartPlayingSound:
+		{
+		iSoundLEDFlasher->Start();
+		TCallBack callback(SoundPlaybackCallbackL, this);
+		iSoundCallbackTimer->Start(TTimeIntervalMicroSeconds32(0), TTimeIntervalMicroSeconds32(3000000), callback);
+		break;
+		}
+
+	case EASAltOpCodeStopPlayingSound:
+		iSoundLEDFlasher->Stop();
+		iSoundCallbackTimer->Cancel();
+		break;
+
+#if 0
+//Test code
+	case EASAltTestOpCodeAcknowledgeAlarm:
+		if (iServer->WaitingSession())
+			iServer->WaitingSession()->Notify(EASAltAlertServerResponseClear);
+		break;
+
+	case EASAltTestOpCodeGetAttachment:
+		{
+		if (iServer->Attachment() != NULL)
+			{
+			const TDes8& data = iServer->Attachment()->Des();
+			const TInt maxLength = static_cast<TInt>(aMessage.Int0());
+			if	(data.Size() > maxLength)
+				User::Panic(_L("Client's buffer is too short"), KErrOverflow);
+			else
+				{
+				if (data.Length() == 0)
+					{
+					_LIT8(KEmpty,"Empty");
+					aMessage.WriteL(KSlot1, KEmpty);
+					}
+				else
+					{
+					aMessage.WriteL(KSlot1, data);
+					}
+				iServer->SetAttachment(NULL);
+				}
+			}
+		}
+		break;
+
+	case EASAltTestOpCodeGetIsNotifying:
+		{
+		TPckgC<TBool> ret = iServer->IsNotifying();
+		aMessage.WriteL(KSlot0, ret);
+		break;
+		}
+#endif
+	default:
+		User::Invariant();
+		break;
+		}
+
+	if	(iMsgComplete)
+		aMessage.Complete(KErrNone);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TBool CConsoleAlarmAlertSession::CmdL()
+	{
+	return KErrNone;
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::SetAlarmL(const RMessage2& aMessage)
+	{
+	TPckg<TASShdAlarm> pA(iAlarm);
+	aMessage.ReadL(KSlot0, pA);
+	if	(iAlarm.HasAssociatedData())
+		{
+		iAlarmAssociatedDataSize = aMessage.GetDesLength(2);
+		TPckg<TAgnAlarmInfo> pB(iAlarmData);
+		aMessage.ReadL(KSlot2, pB);
+
+		//Storing the data in the server for the test session to read..
+		HBufC8* data = HBufC8::NewLC(iAlarmAssociatedDataSize);
+		TPtr8 pData(data->Des());
+		aMessage.ReadL(KSlot2, pData);
+		iServer->SetAttachment(data);  //Server takes an ownership
+		CleanupStack::Pop(data);
+		}
+	else
+		iAlarmAssociatedDataSize = 0;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::GetUserTimeL(const RMessage2& aMessage)
+	{
+	TTime time;
+	time.HomeTime();
+	time+=TTimeIntervalMinutes(iConsole->GetTimeInterval());
+	TPtrC8 pTime((TUint8 *)&time,sizeof(TTime));
+	aMessage.WriteL(KSlot0,pTime);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::SetDeferTimeL(const RMessage2& aMessage)
+	{
+	TPckg<TTime> pTime(iDeferTime);
+	aMessage.ReadL(KSlot0, pTime);
+	}
+
+
+//*************************************************************************************
+TBool CConsoleAlarmAlertSession::SoundPlaybackCallbackL(TAny* /*aSelf*/)
+	{
+//	_LIT(KPlayingSound, "Playing sound");
+//	User::InfoPrint(KPlayingSound);
+	return ETrue;
+	}
+
+//**************************************************************************************
+TAny * CConsoleAlarmAlertSession::InstructionSet()
+	{
+	return iInstructionSet;
+	}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/ConsoleAlarmAlertServer/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,19 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For ConsoleAlarmAlertServer
+// 
+//
+
+PRJ_TESTMMPFILES
+ConsoleAlarmAlertServer.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Group/Smoketest_Timew.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,64 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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			Smoketest_Timew_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7775
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		WriteUserData ReadUserData
+
+SOURCEPATH		..\Src
+
+SOURCE			TestTimewServer.cpp
+SOURCE			TestTimewSetAlarm.cpp
+SOURCE			TestTimewBase.cpp
+SOURCE			SM_ALM.CPP
+SOURCE			SM_UTL.CPP
+SOURCE			SM_MOD.CPP
+SOURCE			SM_RSP.CPP
+
+USERINCLUDE		..\Inc ..\..\Group
+USERINCLUDE		..\ConsoleAlarmAlertServer\Include
+
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+library  		BAFL.LIB
+library			FBSCLI.LIB
+library			WS32.LIB
+library			CONE.LIB
+library			DIAL.LIB
+library			FEPBASE.LIB
+LIBRARY			apparc.lib
+LIBRARY			etext.lib
+LIBRARY			estor.lib
+LIBRARY			efsrv.lib
+
+library			AlarmClient.lib
+library			AlarmShared.lib
+library			EUSER.LIB
+LIBRARY			ecom.lib
+LIBRARY			TestExecuteUtils.lib
+LIBRARY			TestExecuteLogClient.lib
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// For Timew smoketest
+//
+ 
+
+PRJ_TESTEXPORTS
+
+
+../Scripts/Smoketest_Timew.script	/epoc32/release/wins/udeb/z/autosmoketest/smoketest_timew.script
+../Scripts/Smoketest_Timew.script	/epoc32/release/wins/urel/z/autosmoketest/smoketest_timew.script
+../Scripts/Smoketest_Timew.script	/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_timew.script
+../Scripts/Smoketest_Timew.script	/epoc32/release/winscw/urel/z/autosmoketest/smoketest_timew.script
+
+../TestData/Smoketest_Timew.ini				/epoc32/release/wins/udeb/z/autosmoketest/smoketest_timew.ini
+../TestData/Smoketest_Timew.ini				/epoc32/release/wins/urel/z/autosmoketest/smoketest_timew.ini
+../TestData/Smoketest_Timew.ini				/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_timew.ini
+../TestData/Smoketest_Timew.ini				/epoc32/release/winscw/urel/z/autosmoketest/smoketest_timew.ini
+
+
+PRJ_TESTMMPFILES
+Smoketest_Timew.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Inc/ALMMOD.H	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,121 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __ALMMOD_H__
+#define __ALMMOD_H__
+
+// System includes
+#include <asclisession.h>
+
+// User includes
+#include "timewmod.h"
+
+// Constants
+const TInt KArrayOfAlarmIdsGranularity = 64;
+const TInt KPriorityAlarmIdleObserver=-0x0010;
+const TInt KPriorityAlarmResponder=-0x0005; // Idle observer priority must be lower than this
+
+//	The alarm model gives a general notification only
+//
+class CAlmIdleObserver : public CIdleObserver
+	{
+public:
+	static CAlmIdleObserver* NewL(MTimewModelObserver* aObserver,TInt aIdlePriority);
+	};
+
+class CAlmModel : public CModelBase
+	{
+public:
+	~CAlmModel();
+	static CAlmModel* NewL(MTimewModelObserver* aObserver,TInt aResponderPriority);
+	virtual void ProcessResponder(TInt aStatus);
+public:
+	TInt AlarmQuietPeriodMinutes() const;
+	TInt AlarmQuietPeriodSet(TInt aMinutes);
+	inline void AlarmQuietPeriodCancel();
+	TTime AlarmQuietPeriodEnd() const;
+	//
+	void AlarmSoundToggle();
+	TInt AlarmSoundStateSet(TBool aSoundOn);
+	TTimeWAlarmSoundState AlarmSoundState() const;
+	//
+	TInt ClockAlarmDelete(TInt aAlarmIndex);
+	TInt ClockAlarmEnable(TInt aAlarmIndex,TTimeWClockAlarmState aClockAlarmState);
+	TTimeWClockAlarmState ClockAlarmState(TInt aAlarmIndex) const;
+	TInt ClockAlarmSet(TInt aAlarmIndex,const TASShdAlarm& aInfo);
+	TInt ClockAlarmInfo(TInt aAlarmIndex,TASShdAlarm& aInfo);
+	//
+	void NextAlarmResetListL();
+	void NextAlarmClearList();
+	TInt NextAlarmNumber() const;
+	TInt NextAlarmDelete(TInt aIndex);
+	TBool NextAlarmCanDelete(TInt aIndex) const;
+	TInt NextAlarm(TFullName& aOwner, TASShdAlarm& aInfo) const;
+	TInt NextAlarmInfo(TInt aIndex, TFullName& aOwner, TASShdAlarm& aInfo) const;
+	//
+	TInt OrphanAlarmNumber() const;
+	inline TInt UnacknowledgedAlarmNumber() const;
+	//
+	void ReviewAlarmResetListL();
+	void ReviewAlarmClearList();
+	TInt ReviewAlarmNumber() const;
+	TInt ReviewAlarmInfo(TInt aIndex, TASShdAlarm& aInfo) const;
+
+private:
+	CAlmModel();
+	void ConstructL(MTimewModelObserver* aObserver,TInt aResponderPriority);
+
+private:
+
+	/**
+	 * The list of clock alarms. Note that although there is always 8
+	 * alarms in this list, not all will be active.
+	 */
+	RPointerArray<TASShdAlarm> iClockAlarms;
+
+	/**
+	 *
+	 */
+	RASCliSession iAlmSvr;
+
+	/**
+	 *
+	 */
+	TRequestStatus iStatus;
+
+	/**
+	 *
+	 */
+	RArray<TAlarmId> iNextAlarmIds;
+
+	/**
+	 *
+	 */
+	RArray<TAlarmId> iReviewAlarmIds;
+	};
+
+
+TInt CAlmModel::UnacknowledgedAlarmNumber() const
+	{
+	TInt count = iAlmSvr.AlarmCountByState(EAlarmStateWaitingToNotify);
+	return (count + iAlmSvr.AlarmCountByState(EAlarmStateNotifying));
+	}
+
+void CAlmModel::AlarmQuietPeriodCancel()
+	{
+	iAlmSvr.CancelAlarmSilence();
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Inc/ALMMOD.INL	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,79 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 CAlmModel
+inline TAlarmSoundState CAlmModel::AlarmSoundState() const
+	{
+	return(iAlmSvr.AlarmSoundState());
+	}
+inline void CAlmModel::AlarmSoundStateSet(TBool aSoundOn)
+	{
+	iAlmSvr.SetAlarmSoundOn(aSoundOn);
+	}
+inline void CAlmModel::AlarmSoundToggle()
+	{
+	iAlmSvr.SetAlarmSoundOn(iAlmSvr.AlarmSoundState()==EAlarmSoundOff);
+	}
+inline TTime CAlmModel::AlarmQuietPeriodEnd() const
+	{
+	return(iAlmSvr.QuietPeriodUntil());
+	}
+inline void CAlmModel::AlarmQuietPeriodCancel()
+	{
+	iAlmSvr.QuietPeriodCancel();
+	}
+inline TInt CAlmModel::ClockAlarmDelete(TInt aClockAlarmNum)
+	{
+	__ASSERT_DEBUG(aClockAlarmNum<KMaxClockAlarms,Panic(EModelOutOfRange));
+	return(iAlmSvr.AlarmDelete(aClockAlarmNum));
+	}
+inline TAlarmSetState CAlmModel::ClockAlarmState(TInt aClockAlarmNum) const
+	{
+	__ASSERT_DEBUG(aClockAlarmNum<KMaxClockAlarms,Panic(EModelOutOfRange));
+	return(iAlmSvr.AlarmState(aClockAlarmNum));
+	}
+inline void CAlmModel::NextAlarmResetListL()
+	{
+	iAlmSvr.AlarmArrayPopulateL(*iNextAlarms,RAlarmServer::EArrayNext);
+	}
+inline void CAlmModel::NextAlarmClearList()
+	{
+	iNextAlarms->Reset();
+	}
+inline TInt CAlmModel::NextAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountNext));
+	}
+inline void CAlmModel::ReviewAlarmResetListL()
+	{
+	iAlmSvr.AlarmArrayPopulateL(*iReviewAlarms,RAlarmServer::EArrayReview);
+	}
+inline void CAlmModel::ReviewAlarmClearList()
+	{
+	iReviewAlarms->Reset();
+	}
+inline TInt CAlmModel::ReviewAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountReview));
+	}
+inline TInt CAlmModel::OrphanAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountOrphan));
+	}
+inline TInt CAlmModel::UnacknowledgedAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountUnacknowledged));
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Inc/SM_STD.H	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,55 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __SM_STD_H__
+#define __SM_STD_H__
+
+// System includes
+#include <e32base.h>
+#include <asclisession.h>
+#include <asshdalarm.h>
+
+// User includes
+#include "timewmod.h"
+
+class CModelResponder : public CActive
+    {
+public:
+    void Start();
+    virtual void RunL();
+    virtual void DoStart()=0;
+    virtual void DoCancel()=0;
+protected:
+    CModelResponder(CModelBase &aModel,TInt aPriority);
+private:
+    void NotifyModel(TInt aNotification);
+private:
+    CModelBase *iModel;
+    };
+
+class CAlmModel;
+class CAlmResponder : public CModelResponder
+    {
+public:
+    CAlmResponder(RASCliSession& aSvr,CAlmModel& aModel,TInt aResponderPriority);
+public:
+    virtual void DoStart();
+    virtual void DoCancel();
+private:
+    TAlarmId iAlarmId;
+    RASCliSession* iAlmSvr;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Inc/TIMEWMOD.H	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,145 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __TIMEWMOD_H__
+#define __TIMEWMOD_H__
+
+// System includes
+#include <e32base.h>
+
+// Constants
+const TInt KMaxClockAlarms = 8;
+
+/**
+ * From the old T32Alm.h file. Encapsulates the idea of
+ * a "Not set" alarm, which the new AlarmServer doesn't
+ * support.
+ */
+enum TTimeWClockAlarmState
+	{
+	ETimeWClockAlarmStateNotSet = 0,
+	ETimeWClockAlarmStateSet,
+	ETimeWClockAlarmStateDisabled
+	};
+
+/**
+ *
+ */
+enum TTimeWAlarmSoundState
+	{
+	ETimeWAlarmSoundOn = 0,
+	ETimeWAlarmSoundOff,
+	ETimeWAlarmQuietPeriod
+	};
+
+/**
+ *
+ */
+enum TInternalClockAlarmFlags
+	{
+	EClockAlarmFlagsIsSet		= 1
+	};
+
+enum TModelPanic
+	{
+	EModelWorld = 0,
+	EModelObserver,
+	EModelOutOfRange,
+	EModel
+	};
+enum TModelFault
+	{
+	EModelfIdleObj = 0,
+	EModelfPriorityInvalid,
+	EModelfIdleArgument,
+	EModelfNoNotifier,
+	EModelfOutOfRange,
+	EModelfTime,
+	EModelfTryingToChangeStateOfNullClockAlarm,
+	EModelfTryingToGetInfoAboutNullClockAlarm,
+	EModelfTryingToOrphanClockAlarm
+	};
+
+GLREF_C void Panic(TModelPanic aPanic);
+GLREF_C void Fault(TModelFault aFault);
+
+class MTimewModelObserver
+	{
+public:
+	virtual void HandleUpdate(TInt aNotification)=0;
+	};
+
+class CIntermediateObserver : public CBase, public MTimewModelObserver
+	{
+public:
+	CIntermediateObserver();
+	virtual void HandleUpdate(TInt aNotification);
+	void SetTimewModelObserver(MTimewModelObserver* aObserver);
+protected:
+	void Notify(TInt aNotification);
+private:
+	MTimewModelObserver* iObserver;
+	};
+
+class CIdleObserver : public CIntermediateObserver
+	{
+public:
+	CIdleObserver();
+	~CIdleObserver();
+	void ConstructL(MTimewModelObserver* aObserver,TInt aPriority);
+public:
+	void CancelIdleRefresh();
+	virtual void HandleUpdate(TInt aNotification);
+protected:
+	virtual void DoIdleCancel();
+	virtual void DoIdleNotify();
+private:
+	void StartIdleRefresh();
+	static TInt IdleCallBack(TAny* aPtr);
+private:
+	TInt iNotification;
+	CIdle* iIdle;
+	};
+
+class CModelResponder;
+class CModelBase : public CBase
+	{
+protected:
+	CModelBase();
+
+public:
+	~CModelBase();
+
+public:
+	void Stop();
+	void Start();
+	void SetTimewModelObserver(MTimewModelObserver* aObserver);
+
+protected:
+	void Notify(TInt aNotification);
+	virtual void ProcessResponder(TInt aStatus)=0;
+	void SetResponderActive(CModelResponder* aResponder);
+
+private:
+	void DoObserverNotify(TInt aNotification);
+
+private:
+	TBool iDoingViewNotify;
+	MTimewModelObserver* iObserver;
+	CModelResponder* iResponder;
+	friend class CModelResponder;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Inc/TestTimewBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,39 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewBase which is the base class for all
+// the Psd Agx suite test steps
+// 
+//
+
+#ifndef TEST_TIMEW_BASE_H
+#define TEST_TIMEW_BASE_H
+
+#include "almmod.h"
+#include <test/testexecutestepbase.h>
+
+
+class CTestTimewBase : public CTestStep
+{
+public:
+	CTestTimewBase();
+	~CTestTimewBase();
+	virtual enum TVerdict	doTestStepPreambleL();
+	virtual enum TVerdict	doTestStepPostambleL();	CAlmModel*				Model();
+
+private:
+	CActiveScheduler*	iSchedular;
+
+protected:	CAlmModel*			iModel;};
+
+#endif /* TEST_TIMEW_BASE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Inc/TestTimewServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewServer
+// 
+//
+
+#ifndef TEST_TIMEW_SERVER_H
+#define TEST_TIMEW_SERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+class  CTestTimewServer : public CTestServer
+{
+public:
+	static CTestTimewServer*	NewL();
+	virtual CTestStep*			CreateTestStep(const TDesC& aStepName);
+
+private:
+	void	ConstructL();
+};
+
+#endif /* TEST_TIMEW_SERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Inc/TestTimewSetAlarm.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewSetAlarm
+// 
+//
+
+#ifndef TEST_TIMEW_SET_ALARM_H
+#define TEST_TIMEW_SET_ALARM_H
+
+#include "TestTimewBase.h"
+#include <asshdalarm.h>
+
+class CTestTimewSetAlarm : public CTestTimewBase
+{
+public:
+	CTestTimewSetAlarm();
+	virtual ~CTestTimewSetAlarm();
+
+public:
+	virtual enum TVerdict doTestStepL( void );
+
+private:
+	void	SetAlarmL( void );
+	TASShdAlarm iAlarmData;
+};
+
+#endif /* TEST_TIMEW_SET_ALARM_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Scripts/Smoketest_Timew.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+//
+
+PRINT Run Timew smoketest
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\timew.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Timew_Server
+//
+RUN_UTILS MkDir c:\autoSmoketest\
+
+RUN_UTILS CopyFile z:\autosmoketest\smoketest_timew.ini	c:\autosmoketest\smoketest_timew.ini
+RUN_UTILS MakeReadWrite c:\autosmoketest\smoketest_timew.ini
+//
+START_TESTCASE 8979
+RUN_TEST_STEP 1000	Smoketest_Timew_Server	SetAlarm		c:\autosmoketest\Smoketest_Timew.ini	24560_SetAlarm
+END_TESTCASE 8979
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Src/SM_ALM.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,489 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "almmod.h"
+#include "sm_std.h"
+#include <ecom/ecom.h>
+
+//
+//	class CAlmModel
+//
+
+CAlmModel::CAlmModel()
+//
+//	Constructor
+//
+	{
+	}
+
+CAlmModel::~CAlmModel()
+//
+//	Destructor
+//
+	{
+	Stop();
+	iClockAlarms.ResetAndDestroy();
+	iClockAlarms.Close();
+	iReviewAlarmIds.Close();
+	iNextAlarmIds.Close();
+	iAlmSvr.Close();
+ 	REComSession::FinalClose();
+	}
+
+void CAlmModel::ConstructL(MTimewModelObserver* aObserver,TInt aResponderPriority)
+//
+//	Construct the alarm engine components
+//
+	{
+	SetTimewModelObserver(aObserver);
+	//
+	iReviewAlarmIds = RArray<TAlarmId>(KArrayOfAlarmIdsGranularity);
+	iNextAlarmIds = RArray<TAlarmId>(KArrayOfAlarmIdsGranularity);
+	//
+	const TInt r = iAlmSvr.Connect();
+	User::LeaveIfError(r);
+	//
+	TInt i;
+	iClockAlarms = RPointerArray<TASShdAlarm>(KMaxClockAlarms);
+	for(i=0; i<KMaxClockAlarms; i++)
+		{
+		TASShdAlarm* blankAlarm = new(ELeave) TASShdAlarm();
+		CleanupStack::PushL(blankAlarm);
+		User::LeaveIfError(iClockAlarms.Append(blankAlarm));
+		CleanupStack::Pop(blankAlarm);
+		}
+
+	// Identify any clock alarms in the alarm server and put them
+	// into the slots.
+
+	// Fetch
+	RArray<TAlarmId> clockIds(KMaxClockAlarms);
+	CleanupClosePushL(clockIds);
+	iAlmSvr.GetAlarmIdListForCategoryL(KASCliCategoryClock, clockIds);
+
+	// Put them in the slots - we can only display KMaxClockAlarms alarms
+	// so any beyond that are ignored.
+	TInt slotsUsedSoFar = 0;
+	const TInt count = Min(KMaxClockAlarms, clockIds.Count());
+	for(i=0; i<count; i++)
+		{
+		TASShdAlarm* alarm = iClockAlarms[slotsUsedSoFar];
+		User::LeaveIfError(iAlmSvr.GetAlarmDetails(clockIds[i], *alarm));
+
+		// Only show alarms which haven't yet notified
+		if	(alarm->State() != EAlarmStateNotified)
+			{
+			// If we don't do this, then the alarm slot is treated
+			// as available.
+			++slotsUsedSoFar;
+			alarm->ClientFlags().Set(EClockAlarmFlagsIsSet);
+			}
+		}
+	CleanupStack::PopAndDestroy(&clockIds);
+	//
+	CAlmResponder* pR=new(ELeave) CAlmResponder(iAlmSvr,*this,aResponderPriority);
+	SetResponderActive(pR);
+	}
+
+CAlmModel* CAlmModel::NewL(MTimewModelObserver* aObserver,TInt aResponderPriority)
+//
+//	Create a new alarm engine
+//
+	{
+	CAlmModel* model=new(ELeave) CAlmModel;
+	CleanupStack::PushL(model);
+	model->ConstructL(aObserver,aResponderPriority);
+	CleanupStack::Pop(model);
+	return(model);
+	}
+
+void CAlmModel::ProcessResponder(TInt aStatus)
+//
+//	Interpret responder status
+//
+	{
+	// FIX
+	if (aStatus!=KErrCancel && aStatus!=KErrNone)
+		Notify(aStatus);
+	else
+		Notify(0);
+	}
+
+TInt CAlmModel::AlarmQuietPeriodMinutes() const
+//
+//	Return the time that sound is delayed until
+//
+	{
+	TTime timeNow;
+	timeNow.HomeTime();
+	TTime timeQuiet=AlarmQuietPeriodEnd();
+	TInt quietMinutes;
+	if (timeQuiet<=timeNow || timeQuiet==Time::NullTTime())
+		quietMinutes=0;
+	else
+		{
+		TTimeIntervalMinutes minutes;
+		timeQuiet.MinutesFrom(timeNow,minutes);
+		quietMinutes=minutes.Int()+1;
+		}
+	return(quietMinutes);
+	}
+
+TInt CAlmModel::AlarmQuietPeriodSet(TInt aMinutes)
+//
+//	Delay alarm sounds for a given number of minutes
+//
+	{
+	TInt ret = KErrNone;
+	//
+	if	(!aMinutes)
+		ret = iAlmSvr.CancelAlarmSilence();
+	else
+		ret = iAlmSvr.SetAlarmSoundsSilentFor(TTimeIntervalMinutes(aMinutes));
+	//
+	return ret;
+	}
+
+TInt CAlmModel::ClockAlarmEnable(TInt aAlarmIndex, TTimeWClockAlarmState aClockAlarmState)
+//
+//	Enable or disable a clock alarm
+//
+	{
+	__ASSERT_DEBUG(aAlarmIndex < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	TAlarmStatus newStatus;
+	switch(aClockAlarmState)
+		{
+	case ETimeWClockAlarmStateNotSet:
+		return ClockAlarmDelete(aAlarmIndex);
+
+	case ETimeWClockAlarmStateSet:
+		newStatus = EAlarmStatusEnabled;
+		break;
+
+	default:
+	case ETimeWClockAlarmStateDisabled:
+		newStatus = EAlarmStatusDisabled;
+		break;
+		}
+
+	TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+	__ASSERT_ALWAYS(alarm->Id() != KNullAlarmId, Fault(EModelfTryingToChangeStateOfNullClockAlarm));
+	TInt error = iAlmSvr.SetAlarmStatus(alarm->Id(), newStatus);
+	if	(error != KErrNone)
+		return error;
+
+	// Refetch alarm from server (will update status)
+	error = iAlmSvr.GetAlarmDetails(alarm->Id(), *alarm);
+	if	(error == KErrNone)
+		alarm->ClientFlags().Set(EClockAlarmFlagsIsSet);
+	return error;
+	}
+
+TInt CAlmModel::ClockAlarmSet(TInt aAlarmIndex, const TASShdAlarm& aInfo)
+//
+//	Set a clock alarm
+//
+	{
+	__ASSERT_DEBUG(aAlarmIndex < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	TInt error = KErrNone;
+	TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+	if	(alarm->Id() != KNullAlarmId)
+		{
+		// There is already an alarm set in this slot. Delete
+		// the old, replace it with the new.
+		error = iAlmSvr.AlarmDelete(alarm->Id());
+		if	(error != KErrNone)
+			return error;
+		alarm->ClientFlags().Clear(EClockAlarmFlagsIsSet);
+		}
+
+	// Add alarm (will also update cached alarm details)
+	*alarm = aInfo;
+	alarm->Category() = KASCliCategoryClock;
+	error = iAlmSvr.AlarmAdd(*alarm);
+	if	(error == KErrNone)
+		alarm->ClientFlags().Set(EClockAlarmFlagsIsSet);
+	return error;
+	}
+
+TInt CAlmModel::ClockAlarmInfo(TInt aAlarmIndex,TASShdAlarm& aInfo)
+//
+//	Get information about a clock alarm
+//
+	{
+	__ASSERT_DEBUG(aAlarmIndex < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	TInt error = KErrNone;
+	aInfo = *(iClockAlarms[aAlarmIndex]);
+	if	(aInfo.Id() != KNullAlarmId && aInfo.ClientFlags().IsSet(EClockAlarmFlagsIsSet))
+		{
+		// Preserve flags
+		const TBitFlags16 flags = aInfo.ClientFlags();
+
+		// Fetch alarm details
+		error = iAlmSvr.GetAlarmDetails(aInfo.Id(), aInfo);
+
+		// Restore flags
+		if	(error == KErrNone)
+			{
+			// Has the alarm already notified?
+			if	(aInfo.State() != EAlarmStateQueued && aInfo.State() != EAlarmStateNotifying)
+				{
+				// Treat this slot as free
+				TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+				alarm->Reset();
+				aInfo = *alarm;
+				}
+			else
+				aInfo.ClientFlags() = flags;
+			}
+		else if (error == KErrNotFound)
+			{
+			// Alarm has been deleted
+			TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+			alarm->Reset();
+			aInfo = *alarm;
+			}
+		}
+	return error;
+	}
+
+TInt CAlmModel::ClockAlarmDelete(TInt aClockAlarmNum)
+	{
+	__ASSERT_DEBUG(aClockAlarmNum < KMaxClockAlarms, Panic(EModelOutOfRange));
+	TASShdAlarm* alarm = iClockAlarms[aClockAlarmNum];
+	__ASSERT_ALWAYS(alarm->Id() != KNullAlarmId, Fault(EModelfTryingToChangeStateOfNullClockAlarm));
+	const TInt error = iAlmSvr.AlarmDelete(alarm->Id());
+	if	(error == KErrNone || error == KErrNotFound)
+		{
+		// Update cached representation of deleted alarm
+		alarm->Reset();
+		}
+	return error;
+	}
+
+TTimeWClockAlarmState CAlmModel::ClockAlarmState(TInt aClockAlarmNum) const
+	{
+	__ASSERT_DEBUG(aClockAlarmNum < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	const TASShdAlarm* alarm = iClockAlarms[aClockAlarmNum];
+	if	(alarm->ClientFlags().IsSet(EClockAlarmFlagsIsSet))
+		{
+		switch(alarm->Status())
+			{
+		case EAlarmStatusEnabled:
+			return ETimeWClockAlarmStateSet;
+		case EAlarmStatusDisabled:
+			return ETimeWClockAlarmStateDisabled;
+			}
+		}
+	return ETimeWClockAlarmStateNotSet;
+	}
+
+void CAlmModel::NextAlarmResetListL()
+//
+//	Fetch a list of ids of all the alarms that are pending
+//	within the alarm server.
+//
+	{
+	iAlmSvr.GetAlarmIdListByStateL(EAlarmStateQueued, iNextAlarmIds);
+	}
+
+void CAlmModel::NextAlarmClearList()
+	{
+	iNextAlarmIds.Reset();
+	}
+
+TInt CAlmModel::NextAlarmNumber() const
+	{
+	return iAlmSvr.NumberOfAlarmsActiveInQueue();
+	}
+
+TInt CAlmModel::NextAlarmDelete(TInt aIndex)
+//
+//	Delete one of the next alarms
+//
+	{
+	TInt ret = KErrNotFound;
+	if	(aIndex < iNextAlarmIds.Count())
+		{
+		const TAlarmId id = iNextAlarmIds[aIndex];
+		ret = iAlmSvr.AlarmDelete(id);
+		}
+	return ret;
+	}
+
+TBool CAlmModel::NextAlarmCanDelete(TInt aIndex) const
+//
+//	Determine whether can delete the specified alarm.
+//
+	{
+	__ASSERT_DEBUG(aIndex < iNextAlarmIds.Count(), Panic(EModelOutOfRange));
+	//
+	const TAlarmId id = iNextAlarmIds[aIndex];
+	//
+	TASShdAlarm alarm;
+	if	(iAlmSvr.GetAlarmDetails(id, alarm) == KErrNone)
+		{
+		return (
+			alarm.Category() == KASCliCategoryClock ||
+			alarm.State() == EAlarmStateSnoozed ||
+			!alarm.HasOwningSession()
+			);
+		}
+	return EFalse;
+	}
+
+TInt CAlmModel::NextAlarm(TFullName& aOwner, TASShdAlarm& aInfo) const
+//
+//	Get information about the next alarm
+//
+	{
+	aOwner = KNullDesC;
+	//
+	TAlarmId id = KNullAlarmId;
+	TInt ret = iAlmSvr.GetNextDueAlarmId(id);
+	if	(ret == KErrNone)
+		{
+		if	(id == KNullAlarmId)
+			{
+			aInfo.Reset();
+			ret = KErrNotFound;
+			}
+		else
+			{
+			ret = iAlmSvr.GetAlarmDetails(id, aInfo);
+			if	(ret == KErrNone)
+				ret = iAlmSvr.GetAlarmOwner(id, aOwner);
+			}
+		}
+	return ret;
+	}
+
+TInt CAlmModel::NextAlarmInfo(TInt aIndex, TFullName& aOwner, TASShdAlarm& aInfo) const
+//
+//	Get info about the next alarm
+//
+	{
+	TInt ret = KErrNotFound;
+	if	(aIndex < iNextAlarmIds.Count())
+		{
+		const TAlarmId id = iNextAlarmIds[aIndex];
+		ret = iAlmSvr.GetAlarmDetails(id, aInfo);
+		if	(ret == KErrNone)
+			{
+			ret = iAlmSvr.GetAlarmOwner(id, aOwner);
+			}
+		}
+	return ret;
+	}
+
+void CAlmModel::ReviewAlarmResetListL()
+	{
+	iAlmSvr.GetAlarmIdListByStateL(EAlarmStateNotified, iReviewAlarmIds);
+	}
+
+void CAlmModel::ReviewAlarmClearList()
+	{
+	iReviewAlarmIds.Reset();
+	}
+
+TInt CAlmModel::ReviewAlarmNumber() const
+	{
+	return iAlmSvr.AlarmCountByState(EAlarmStateNotified);
+	}
+
+TInt CAlmModel::ReviewAlarmInfo(TInt aIndex, TASShdAlarm& aInfo) const
+//
+//	Get information about a past alarm
+//
+	{
+	TInt ret = KErrNotFound;
+	if	(aIndex < iReviewAlarmIds.Count())
+		{
+		const TAlarmId id = iReviewAlarmIds[aIndex];
+		ret = iAlmSvr.GetAlarmDetails(id, aInfo);
+		}
+	return ret;
+	}
+
+void CAlmModel::AlarmSoundToggle()
+	{
+	TTimeWAlarmSoundState soundState = AlarmSoundState();
+	if	(soundState == ETimeWAlarmSoundOn)
+		AlarmSoundStateSet(EFalse);
+	else
+		AlarmSoundStateSet(ETrue);
+	}
+
+TInt CAlmModel::AlarmSoundStateSet(TBool aSoundOn)
+	{
+	TAlarmGlobalSoundState state = EAlarmGlobalSoundStateOn;
+	if	(!aSoundOn)
+		state = EAlarmGlobalSoundStateOff;
+
+	return iAlmSvr.SetAlarmSoundState(state);
+	}
+
+TTimeWAlarmSoundState CAlmModel::AlarmSoundState() const
+	{
+	// First check whether we're in a silent period
+	if	(iAlmSvr.AlarmSoundsTemporarilySilenced())
+		return ETimeWAlarmQuietPeriod;
+
+	// We're not, so check global sound state and map
+	// to TimeW settings
+	TAlarmGlobalSoundState state = EAlarmGlobalSoundStateOff;
+	if	(iAlmSvr.GetAlarmSoundState(state) == KErrNone)
+		{
+		if	(state == EAlarmGlobalSoundStateOn)
+			return ETimeWAlarmSoundOn;
+		}
+	return ETimeWAlarmSoundOff;
+	}
+
+TTime CAlmModel::AlarmQuietPeriodEnd() const
+	{
+	TTime endTime;
+	if	(iAlmSvr.GetAlarmSoundsSilentUntil(endTime) == KErrNone)
+		return endTime;
+	//
+	endTime.HomeTime();
+	return endTime;
+	}
+
+TInt CAlmModel::OrphanAlarmNumber() const
+	{
+	// Get the alarms
+	RArray<TAlarmId> clockIds(KMaxClockAlarms);
+	CleanupClosePushL(clockIds);
+	iAlmSvr.GetAlarmIdListForCategoryL(KASCliCategoryClock, clockIds);
+
+	//which are orphaned?
+	TInt count = clockIds.Count();
+	TInt orphaned = 0;
+	for	(TInt ii=0; ii<count; ii++)
+		{
+		TASShdAlarm alarm;
+		iAlmSvr.GetAlarmDetails(clockIds[ii], alarm);
+		if	(alarm.HasBecomeOrphaned())
+			orphaned++;
+		}
+	CleanupStack::PopAndDestroy(&clockIds);
+
+	return orphaned;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Src/SM_MOD.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,87 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "sm_std.h"
+
+CModelBase::CModelBase()
+//
+//	Protected constructor
+//
+	{
+	}
+
+CModelBase::~CModelBase()
+//
+//	destructor
+//
+	{
+	delete(iResponder);
+	}
+
+void CModelBase::Notify(TInt aNotification)
+//
+//	Funnel for all calls to the notifier
+//
+	{
+	if (!iDoingViewNotify && iObserver)
+		DoObserverNotify(aNotification);
+	}
+
+void CModelBase::DoObserverNotify(TInt aNotification)
+//
+//	Single function that actually calls the view notifier
+//
+	{
+	__ASSERT_DEBUG(iObserver,Fault(EModelfNoNotifier));
+	iDoingViewNotify=ETrue;
+	iObserver->HandleUpdate(aNotification);
+	iDoingViewNotify=EFalse;
+	}
+
+void CModelBase::SetResponderActive(CModelResponder* aResponder)
+//
+//	Set the engines responder
+//
+	{
+	iResponder=aResponder;
+	if (iResponder)
+		CActiveScheduler::Add(iResponder);
+	}
+
+void CModelBase::Start()
+//
+//	Start the responder
+//	The engine requires that an active scheduler be installed
+//
+	{
+	iResponder->Start();
+	}
+
+void CModelBase::Stop()
+//
+//	Stop the responder and the engine
+//
+	{
+	if (iResponder)
+		iResponder->Cancel();
+	}
+
+void CModelBase::SetTimewModelObserver(MTimewModelObserver *aObserver)
+//
+//	Register the observer of the engine
+//
+	{
+	iObserver=aObserver;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Src/SM_RSP.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "sm_std.h"
+#include "almmod.h"
+
+//
+//	class CModelResponder
+//
+
+CModelResponder::CModelResponder(CModelBase& aModel,TInt aPriority)
+//
+//	Base class constructor
+//
+	: CActive(aPriority), iModel(&aModel)
+	{
+	}
+
+void CModelResponder::NotifyModel(TInt aStatus)
+//
+//	Funnel all response to the engine
+//
+	{
+	iModel->ProcessResponder(aStatus);
+	}
+
+void CModelResponder::RunL()
+//
+//	Handle changes in the servers
+//
+	{
+//	Reset the status request before notifiying the view
+//	so that it can catch anything untoward that the view does
+	TInt v=iStatus.Int();
+	Start();
+	NotifyModel(v);
+	}
+
+void CModelResponder::Start()
+//
+//	Start the response
+//
+	{
+	if (!IsActive())
+		{
+		SetActive();
+		DoStart();
+		}
+	}
+
+//
+//	class CAlmResponder
+//
+
+CAlmResponder::CAlmResponder(RASCliSession& aSvr,CAlmModel& aModel,TInt aResponderPriority)
+//
+//	Protected constructor
+//
+	: CModelResponder(aModel,aResponderPriority),iAlmSvr(&aSvr)
+	{
+	}
+
+void CAlmResponder::DoStart()
+//
+//	Start a repsonse
+//
+	{
+	iAlmSvr->NotifyChange(iStatus, iAlarmId);
+	}
+
+void CAlmResponder::DoCancel()
+//
+//	Stop the response
+//
+	{
+	if	(iStatus == KRequestPending)
+		iAlmSvr->NotifyChangeCancel();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Src/SM_UTL.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,34 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "sm_std.h"
+
+
+GLDEF_C void Panic(TModelPanic aPanic)
+//
+//	Panic in the engine
+//
+	{
+	User::Panic(_L("TW-ENG-PANIC"),aPanic);
+	}
+
+GLDEF_C void Fault(TModelFault aFault)
+//
+//	Fault in the engine
+//
+	{
+	User::Panic(_L("TW-ENG-FAULT"),aFault);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Src/TestTimewBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,62 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewCase which is the base class for all the Timew TestCase DLL
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <test/testexecutelog.h>
+#include "TestTimewbase.h"
+
+CTestTimewBase::CTestTimewBase()
+: CTestStep()
+, iSchedular(NULL)
+, iModel(NULL)
+	{
+	}
+
+// destructor
+CTestTimewBase::~CTestTimewBase()
+	{
+	delete iSchedular;
+	iSchedular=NULL;
+	}
+
+enum TVerdict CTestTimewBase::doTestStepPreambleL()
+	{
+	iSchedular=new CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+
+	return CTestStep::doTestStepPreambleL();
+	}
+
+enum TVerdict CTestTimewBase::doTestStepPostambleL()
+	{
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+
+	return CTestStep::doTestStepPostambleL();
+	}
+
+CAlmModel*	CTestTimewBase::Model(void)
+/**
+returns a pointer to an instance of CAgnModel
+*/
+	{
+  	return iModel;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Src/TestTimewServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,106 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 main DLL entry point for the Smoketest_Timew.dll
+// 
+//
+
+
+// EPOC includes
+#include <e32base.h>
+
+#include "TestTimewServer.h"
+#include "TestTimewSetAlarm.h"
+
+
+_LIT(KServerName,"Smoketest_Timew_Server");
+
+CTestTimewServer* CTestTimewServer::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.
+ */
+	{
+	CTestTimewServer*	server = new (ELeave) CTestTimewServer();
+	CleanupStack::PushL(server);
+	// CServer base class call
+	server->StartL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler*	sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CTestTimewServer*	server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTestTimewServer::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());
+        if (!err) { }
+        
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+
+CTestStep* CTestTimewServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep*	testStep = NULL;
+
+	if(aStepName == _L("SetAlarm"))
+		testStep = new CTestTimewSetAlarm();
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/Src/TestTimewSetAlarm.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,84 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewSetAlarm
+// 
+//
+
+#include <test/testexecuteclient.h>
+
+#include "TestTimewSetAlarm.h"
+
+
+_LIT(KHour,	"hour");
+_LIT(KMinute,"minute");
+_LIT(KMessage,"message");
+_LIT(KBells,"bells");
+
+
+// constructor
+CTestTimewSetAlarm::CTestTimewSetAlarm()
+	{
+	SetTestStepName(_L("SetAlarm"));
+	}
+
+// destructor
+CTestTimewSetAlarm::~CTestTimewSetAlarm()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestTimewSetAlarm::doTestStepL( void )
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("TEST-> SETTING AN ALARM"));
+		TRAPD(r, SetAlarmL());
+
+	if (r!=KErrNone)
+		SetTestStepResult(EFail);
+
+	// test steps return a result
+	return TestStepResult();
+	}
+
+void CTestTimewSetAlarm::SetAlarmL( void )
+	{
+	TInt	hour;
+	TInt	minute;
+	TPtrC	ptrMessage;
+
+	TTime alarmTime;
+	alarmTime.HomeTime();
+
+	if ( !GetIntFromConfig(ConfigSection(), KHour(), hour) )
+		hour=alarmTime.DateTime().Hour();
+
+	if ( !GetIntFromConfig(ConfigSection(), KMinute(), minute) )
+		minute=0;
+
+	GetStringFromConfig(ConfigSection(), KMessage(), ptrMessage);
+
+
+	TDateTime dateTime=alarmTime.DateTime();
+	dateTime.SetHour(hour);
+	dateTime.SetMinute(minute);
+	dateTime.SetSecond(0);
+	dateTime.SetMicroSecond(0);
+	iAlarmData.NextDueTime()=dateTime;
+	iAlarmData.RepeatDefinition()=(TAlarmRepeatDefinition)EAlarmRepeatDefintionRepeatNext24Hours;
+	iAlarmData.Message() = ptrMessage;
+	iAlarmData.SoundName()=KBells();
+	iModel = CAlmModel::NewL(NULL,KPriorityAlarmResponder);
+	Model()->ClockAlarmSet(0,iAlarmData);
+	delete iModel;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Timew/TestData/Smoketest_Timew.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,5 @@
+[24560_SetAlarm]
+hour			=9
+min			=0
+message			=make a cup of tea
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Inc/SmokeTestActive.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,115 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestActive
+// 
+//
+
+#if (!defined __SMOKETEST_ACTIVE_H__)
+#define __SMOKETEST_ACTIVE_H__
+
+#include <e32base.h>
+
+/**
+ * Multimedia test timer completion callback
+ */
+class MTestActiveCallback
+	{
+public:
+	/**
+	* Method from which CTestActive informs the user RunL call
+	*/
+	virtual void	RunL() = 0;
+	/**
+	* Method from which CTestActive informs the user DoCancel call
+	*/
+	virtual void	DoCancel() = 0;
+	};
+
+/**
+ * Test Active Notification class
+ *
+ */
+class CTestActive : public CActive
+{
+public:
+	/**
+	* Destructor
+	*/
+	IMPORT_C virtual ~CTestActive();
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Active object whos actions are performed by a callback
+	*
+	* \param aTestActiveCallback object to inform on RunL.
+	* \param aPriority priority of active object.
+	* \return New Callback active object.
+	*/
+	IMPORT_C static CTestActive*	NewL(MTestActiveCallback& aTestActiveCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Active object whos actions are performed by a callback
+	*
+	* \param aTestActiveCallback object to inform on RunL.
+	* \param aPriority priority of active object.
+	* \return New Callback active object.
+	*/
+	IMPORT_C static CTestActive*	NewLC(MTestActiveCallback& aTestActiveCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Activate the object
+	*/
+	IMPORT_C void					Activate();
+
+	/**
+	* Active object RunL implementation.
+	*
+	* Calls the MTestActiveCallback::RunL to inform user that the RunL has been reached.
+	*/
+	void	RunL();
+	/**
+	* Active object DoCancel implementation.
+	*
+	* Calls the MTestActiveCallback::DoCancel to inform user that the DoCancel has been reached.
+	*/
+	void	DoCancel();
+
+protected:
+	/**
+	* Protected constructor with timer completion callback and priority.
+	*
+	* Called by two phase constructor.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	*/
+	CTestActive(MTestActiveCallback& aTestActiveCallback, TInt aPriority);
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*
+	* Second phase of two phase constructor.
+	*/
+	void	ConstructL();
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*/
+	MTestActiveCallback&	iTestActiveCallback;
+};
+
+#endif /* __SMOKETEST_ACTIVE_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Inc/SmokeTestProperty.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,93 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestProperty
+// 
+//
+
+#if (!defined __SMOKETEST_PROPERTY_H__)
+#define __SMOKETEST_PROPERTY_H__
+
+// EPOC includes
+#include <test/testexecutestepbase.h>
+#include <e32property.h>
+
+/**
+ This class contains generic utility method to set system wide variable usign publish and subscribe
+*/
+class CTestProperty : public CBase
+{
+public:
+	IMPORT_C CTestProperty(CTestStep& aTestStep);
+	IMPORT_C ~CTestProperty();
+
+	/**
+	* Set a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key
+	*/
+	IMPORT_C TInt SetPropertyL(const TUid aCategory, const TInt aKey, const TInt aValue);
+
+	/**
+	* Set a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key
+	*/
+	IMPORT_C TInt SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC8& aValue);
+
+	/**
+	* Set a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key
+	*/
+	IMPORT_C TInt SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC16& aValue);
+
+	/**
+	* Get a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key returned
+	*/
+	IMPORT_C TInt GetPropertyL(const TUid aCategory, const TInt aKey, TInt& aValue);
+
+	/**
+	* Get a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key returned
+	*/
+	IMPORT_C TInt GetPropertyL(const TUid aCategory, const TInt aKey, TDes8& aValue);
+
+	/**
+	* Get a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key returned
+	*/
+	IMPORT_C TInt GetPropertyL(const TUid aCategory, const TInt aKey, TDes16& aValue);
+
+private:
+	CTestStep&	iTestStep;
+	RProperty	iProperty;
+};
+
+#endif /* __SMOKETEST_PROPERTY_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Inc/SmokeTestSecureFSclient.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,34 @@
+// 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:
+//
+
+#ifndef __SMOKETEST_SECURE_FS_CLIENT_H__
+#define __SMOKETEST_SECURE_FS_CLIENT_H__
+
+#include <e32std.h>
+
+class RTestSecureFSclient : public RSessionBase
+	{
+public:
+	IMPORT_C TInt Connect();
+	IMPORT_C TInt SetHomeTime(const TTime& aTime);
+	IMPORT_C TInt DeleteFileL(const TDesC& aFileName);
+	IMPORT_C void KillProcessL(const TDesC& aProcessName);
+	IMPORT_C TInt ChangeLocaleName(const TDesC& aLocaleDllName);
+	IMPORT_C TInt CheckForFile(const TDesC& aFileName);
+    IMPORT_C TInt CopyFile(const TDesC& Source, const TDesC& Dest);
+    IMPORT_C void SetUpFbs();
+	};
+
+#endif // __SMOKETEST_SECURE_FS_CLIENT_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Inc/SmokeTestSecureFSclientserver.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,40 @@
+// 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:
+// clientserver - shared client/server definitions
+// 
+//
+
+#ifndef __SMOKETEST_SECURE_FS_CLIENT_SERVER_H__
+#define __SMOKETEST_SECURE_FS_CLIENT_SERVER_H__
+
+#include <e32std.h>
+
+_LIT(KTestServerName,"SmokeTestSecureFSserver");
+_LIT(KTestServerImg,"SmokeTestSecureFSserver");		// EXE name
+const TUid KServerUid3={0x101FF346};
+
+const TInt KMaxTestMessage=8;
+
+enum TTestIpc
+	{
+	ETestIpcSetHomeTime,
+	ETestIpcDeleteFile,
+	ETestIpcKillProcess,
+	ETestIpcChangeLocale,
+	ETestIpcCheckForFile,
+    ETestIpcCopyFile,
+    ETestIpcSetUpFbs,
+	};
+
+#endif // __SMOKETEST_SECURE_FS_CLIENT_SERVER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Inc/SmokeTestSecureFSserver.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// 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:
+// TestServer - server classes
+// 
+//
+
+#ifndef __SMOKETEST_SECURE_FS_SERVER_H__
+#define __SMOKETEST_SECURE_FS_SERVER_H__
+
+#include <e32base.h>
+#include "SmokeTestSecureFSclientserver.h"
+
+enum TTestPanic
+	{
+	EPanicBadDescriptor,
+	EPanicIllegalFunction,
+	EPanicAlreadyReceiving
+	};
+
+void PanicClient(const RMessage2& aMessage,TTestPanic TMyPanic);
+
+class CTestSecureFSshutdown : public CTimer
+	{
+	enum {KMyShutdownDelay=0x500000};	// approx 5s
+public:
+	inline CTestSecureFSshutdown();
+	inline void ConstructL();
+	inline void Start();
+private:
+	void RunL();
+	};
+
+class CTestSecureFSserver : public CServer2
+	{
+public:
+	static CServer2* NewLC();
+	void AddSession();
+	void DropSession();
+	void Send(const TDesC& aMessage);
+private:
+	CTestSecureFSserver();
+	void ConstructL();
+	// CSharableSession* NewSessionL(const TVersion& aVersion, const RMessage& aMessage) const;
+        CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+private:
+	TInt iSessionCount;
+	CTestSecureFSshutdown iShutdown;
+	};
+
+//class CTestSecureFSSession : public CSharableSession
+class CTestSecureFSSession : public CSession2
+	{
+public:
+	CTestSecureFSSession();
+	void CreateL();
+	void Send(const TDesC& aMessage);
+private:
+	~CTestSecureFSSession();
+	inline CTestSecureFSserver& Server();
+	void ServiceL(const RMessage2& aMessage);
+	void ServiceError(const RMessage2& aMessage,TInt aError);
+	inline TBool ReceivePending() const;
+private:
+	void DoSetHomeTime(const RMessage2& aMessage);
+	
+	// General File Manipulation
+	TInt DoDeleteFileL(const RMessage2& aMessage);
+
+	// Power User
+	void DoKillProcess(const RMessage2& aMessage);
+	TInt DoChangeLocale(const RMessage2& aMessage);
+	TInt DoCheckForFile(const RMessage2& aMessage);
+	TInt DoCopyFile(const RMessage2& aMessage);
+	void DoSetUpFbs();
+
+private:
+	RMessage2 iReceive;
+	};
+
+#endif // __SMOKETEST_SECURE_FS_SERVER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Inc/SmokeTestTimeOutTimer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,102 @@
+// 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"
+// which accompanies 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 contains CTestTimeOutTimer
+// 
+//
+
+#if (!defined __SMOKETEST_TIMEOUT_TIMER_H_)
+#define __SMOKETEST_TIMEOUT_TIMER_H_
+
+#include <e32base.h>
+
+/**
+ * Multimedia test timer completion callback
+ */
+class MTestTimeOutTimerCallback
+	{
+public:
+	/**
+	* Method from which CTestTimeOutTimer informs the user of the timer completion.
+	*/
+	virtual void TimerCompleted() = 0;
+	};
+
+/**
+ * Multimedia test timer active object.
+ *
+ * On timer completion MTestTimeOutTimerCallback::TimerCompleted is called
+ * to inform the user off the completion
+ */
+class CTestTimeOutTimer : public CTimer  
+{
+public:
+	/**
+	* Destructor
+	*/
+	IMPORT_C virtual ~CTestTimeOutTimer();
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Multimedia timer a timer completion callback and priority.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	* \return New Multimedia test timer active object.
+	*/
+	IMPORT_C static CTestTimeOutTimer*	NewL(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Multimedia timer a timer completion callback and priority.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	* \return New Multimedia test timer active object.
+	*/
+	IMPORT_C static CTestTimeOutTimer*	NewLC(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Active object RunL implementation.
+	*
+	* Calls the MTestTimeOutTimerCallback::TimerCompleted to inform user that the timer has completed.
+	*/
+	void	RunL();
+
+protected:
+	/**
+	* Protected constructor with timer completion callback and priority.
+	*
+	* Called by two phase constructor.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	*/
+	CTestTimeOutTimer(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority);
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*
+	* Second phase of two phase constructor.
+	*/
+	void	ConstructL();
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*/
+	MTestTimeOutTimerCallback&	iTestTimerCallback;
+};
+
+#endif /* __SMOKETEST_TIMEOUT_TIMER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Inc/TestStepSmokeTest.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,77 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestStepSmokeTest
+
+#if (!defined __TEST_STEP_SMOKETEST_H__)
+#define __TEST_STEP_SMOKETEST_H__
+
+//TEF include
+#include <test/testexecutestepbase.h>
+ 
+enum TTestLoggingDetail
+	{
+	ETestLoggingDetail_Min,
+	ETestLoggingDetail_Normal,
+	ETestLoggingDetail_Max,
+	};
+
+#if (defined __VERSION_70S__)
+enum TCapability
+	{
+	ECapabilityTCB				= 0,
+	};
+#endif
+
+/**
+ This class is the base class for all the test steps in smoketest.
+*/
+class CTestStepSmokeTest : public CTestStep
+	{
+public:
+	//Destructor
+	IMPORT_C virtual ~CTestStepSmokeTest();
+
+	/**
+	 Pure virtual, to be implemented by the derived test steps.
+	 It implements the required functionality of the test step.
+	 @return TVerdict - result of the test step
+	 @leave - System wide error codes
+	*/
+	IMPORT_C virtual enum TVerdict	doTestStepL() = 0;
+
+	//Implements the preoperational functionalities for a test step
+	IMPORT_C virtual enum TVerdict	doTestStepPreambleL();
+
+	//Implements the post operational fucntionalities for a test step
+	IMPORT_C virtual enum TVerdict	doTestStepPostambleL();
+
+	TTestLoggingDetail		LoggingDetail() const { return iLoggingDetail; }
+	TInt					Repetition() const { return iRepetition; }
+
+protected:
+	//Constructor
+	IMPORT_C CTestStepSmokeTest();
+
+	//Gets the TCapability value for the capabilty string literal
+	IMPORT_C TInt			GetCapability(TPtrC aCapability, TCapability& aCapabilityValue);
+
+	//Verifies the given time is nearly eaual to current UTC time
+	IMPORT_C TBool			VerifyUTCTime(TTime aTime);
+
+private:
+	TTestLoggingDetail			iLoggingDetail;
+	TInt						iRepetition;
+	};
+
+#endif /* __TEST_STEP_SMOKETEST_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Src/SmokeTestActive.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,69 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// SmokeTestTestActive.h
+// This contains CTestActive
+// 
+//
+
+#include "SmokeTestActive.h"
+
+
+//
+// Construction/Destruction
+//
+
+EXPORT_C CTestActive::~CTestActive()
+	{
+	}
+
+EXPORT_C CTestActive* CTestActive::NewL(MTestActiveCallback& aTestActiveCallback, TInt aPriority)
+	{
+	CTestActive*	self=NewLC(aTestActiveCallback, aPriority);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C CTestActive* CTestActive::NewLC(MTestActiveCallback& aTestActiveCallback, TInt aPriority)
+	{
+	CTestActive*	self=new(ELeave) CTestActive(aTestActiveCallback, aPriority);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C void CTestActive::Activate()
+	{
+	SetActive();
+	}
+
+CTestActive::CTestActive(MTestActiveCallback& aTestActiveCallback, TInt aPriority)
+:	CActive(aPriority)
+,	iTestActiveCallback(aTestActiveCallback)
+	{
+	}
+
+void CTestActive::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CTestActive::RunL()
+	{
+	iTestActiveCallback.RunL();
+	}
+
+void CTestActive::DoCancel()
+	{
+	iTestActiveCallback.DoCancel();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Src/SmokeTestProperty.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,140 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestProperty
+// 
+//
+
+#include "SmokeTestProperty.h"
+
+// EPOC32 include
+#include <e32base.h>
+
+EXPORT_C CTestProperty::CTestProperty(CTestStep& aTestStep)
+:	CBase()
+,	iTestStep(aTestStep)
+	{
+	}
+
+EXPORT_C CTestProperty::~CTestProperty()
+	{
+	}
+
+EXPORT_C TInt CTestProperty::SetPropertyL(const TUid aCategory, const TInt aKey, const TInt aValue)
+	{
+	//Define the property, in case it is being used for the first time.
+	TInt	ret=RProperty::Define(aCategory, aKey, RProperty::EInt);
+	if ( (ret==KErrNone) || (ret== KErrAlreadyExists) )
+		{
+		//Attach to the property so that you can track any chnages to it.
+		ret=iProperty.Attach(aCategory, aKey);
+		if ( ret==KErrNone )
+			{
+			//Set the new test number and wait until the change is in effect.
+			TRequestStatus	status;
+			iProperty.Subscribe(status);
+			ret=iProperty.Set(aCategory, aKey, aValue);
+			if ( ret==KErrNone )
+				{
+				User::WaitForRequest(status);
+				ret=status.Int();
+				if ( ret != KErrNone )
+					{
+					iTestStep.INFO_PRINTF2(_L("request complete error=%d"), ret);
+					}
+				}
+			else
+				{
+				iTestStep.INFO_PRINTF2(_L("RProperty::Set error=%d"), ret);
+				}
+			iProperty.Close();
+			}
+		else
+			{
+			iTestStep.INFO_PRINTF2(_L("RProperty::Attach error=%d"), ret);
+			}
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF2(_L("RProperty::Define error=%d"), ret);
+		}
+
+	return ret;
+	}
+
+EXPORT_C TInt CTestProperty::SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC8& aValue)
+	{
+	//Define the property, in case it is being used for the first time.
+	TInt	ret=RProperty::Define(aCategory, aKey, RProperty::EByteArray);
+	if ( (ret==KErrNone) || (ret== KErrAlreadyExists) )
+		{
+		//Attach to the property so that you can track any chnages to it.
+		ret=iProperty.Attach(aCategory, aKey);
+		if ( ret==KErrNone )
+			{
+			//Set the new test number and wait until the change is in effect.
+			TRequestStatus	status;
+			iProperty.Subscribe(status);
+			ret=iProperty.Set(aCategory, aKey, aValue);
+			if ( ret==KErrNone )
+				{
+				User::WaitForRequest(status);
+				ret=status.Int();
+				}
+			iProperty.Close();
+			}
+		}
+
+	return ret;
+	}
+
+EXPORT_C TInt CTestProperty::SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC16& aValue)
+	{
+	//Define the property, in case it is being used for the first time.
+	TInt	ret=RProperty::Define(aCategory, aKey, RProperty::EText);
+	if ( (ret==KErrNone) || (ret== KErrAlreadyExists) )
+		{
+		//Attach to the property so that you can track any chnages to it.
+		ret=iProperty.Attach(aCategory, aKey);
+		if ( ret==KErrNone )
+			{
+			//Set the new test number and wait until the change is in effect.
+			TRequestStatus	status;
+			iProperty.Subscribe(status);
+			ret=iProperty.Set(aCategory, aKey, aValue);
+			if ( ret==KErrNone )
+				{
+				User::WaitForRequest(status);
+				ret=status.Int();
+				}
+			iProperty.Close();
+			}
+		}
+
+	return ret;
+	}
+
+EXPORT_C TInt CTestProperty::GetPropertyL(const TUid aCategory, const TInt aKey, TInt& aValue)
+	{
+	return RProperty::Get(aCategory, aKey, aValue);
+	}
+
+EXPORT_C TInt CTestProperty::GetPropertyL(const TUid aCategory, const TInt aKey, TDes8& aValue)
+	{
+	return RProperty::Get(aCategory, aKey, aValue);
+	}
+
+EXPORT_C TInt CTestProperty::GetPropertyL(const TUid aCategory, const TInt aKey, TDes16& aValue)
+	{
+	return RProperty::Get(aCategory, aKey, aValue);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Src/SmokeTestSecureFSclient.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,113 @@
+// 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"
+// which accompanies 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 Server - client interface implementation
+// 
+//
+
+#include <e32std.h>
+#include <e32math.h>
+#include "SmokeTestSecureFSclientserver.h"
+#include "SmokeTestSecureFSclient.h"
+
+static TInt StartServer()
+//
+// Start the server process. Simultaneous launching
+// of two such processes should be detected when the second one attempts to
+// create the server object, failing with KErrAlreadyExists.
+//
+	{
+	const TUidType serverUid(KNullUid,KNullUid,KServerUid3);
+
+
+	RProcess server;
+	TInt r=server.Create(KTestServerImg, KNullDesC, serverUid);
+
+	if (r!=KErrNone)
+		return r;
+	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
+	r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+	server.Close();
+	return r;
+	}
+
+EXPORT_C TInt RTestSecureFSclient::Connect()
+	{// Connect to the server, attempting to start it if necessary
+	TInt retry=2;
+	for (;;)
+		{
+		TInt r=CreateSession(KTestServerName,TVersion(0,0,0),1);
+		if (r!=KErrNotFound && r!=KErrServerTerminated)
+			return r;
+		if (--retry==0)
+			return r;
+		r=StartServer();
+		if (r!=KErrNone && r!=KErrAlreadyExists)
+			return r;
+		User::After(1000000); //Let server load up (in EKA2)
+
+		}
+	}
+
+EXPORT_C TInt RTestSecureFSclient::SetHomeTime(const TTime& aTime) 
+	{
+	TPckg<TTime> pckg(aTime);
+	return SendReceive(ETestIpcSetHomeTime,TIpcArgs(&pckg));
+	}
+
+EXPORT_C TInt RTestSecureFSclient::DeleteFileL(const TDesC& aFileName)
+	{
+	TIpcArgs args(&aFileName);
+	return SendReceive(ETestIpcDeleteFile,args);
+	}
+
+EXPORT_C void RTestSecureFSclient::KillProcessL(const TDesC& aProcessName)
+	{
+	TIpcArgs args(&aProcessName);
+	User::LeaveIfError(SendReceive(ETestIpcKillProcess,args));
+	}
+
+EXPORT_C TInt RTestSecureFSclient::ChangeLocaleName(const TDesC& aLocaleDllName)
+	{
+	TIpcArgs args(&aLocaleDllName);
+	return SendReceive(ETestIpcChangeLocale,args);
+	}
+
+EXPORT_C TInt RTestSecureFSclient::CheckForFile(const TDesC& aFileName)
+    {
+	TIpcArgs args(&aFileName); 
+	return SendReceive(ETestIpcCheckForFile,args);  
+    }
+    
+EXPORT_C TInt RTestSecureFSclient::CopyFile(const TDesC& Source, const TDesC& Dest)
+    {
+	TIpcArgs args(&Source, &Dest); 
+	return SendReceive(ETestIpcCopyFile,args);  
+    }
+    
+EXPORT_C void RTestSecureFSclient::SetUpFbs()
+    {
+	SendReceive(ETestIpcSetUpFbs);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Src/SmokeTestSecureFSserver.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,393 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestServer - server implementation
+// 
+//
+
+#include "e32std.h"
+#include "SmokeTestSecureFSserver.h"
+#include <f32file.h>
+
+TRequestStatus aStatus;
+TRequestStatus* aSt = &aStatus;
+
+
+inline CTestSecureFSshutdown::CTestSecureFSshutdown()
+	:CTimer(-1)
+	{CActiveScheduler::Add(this);}
+inline void CTestSecureFSshutdown::ConstructL()
+	{CTimer::ConstructL();}
+inline void CTestSecureFSshutdown::Start()
+	{After(KMyShutdownDelay);}
+
+inline CTestSecureFSserver::CTestSecureFSserver()
+	:CServer2(0,ESharableSessions)
+	{}
+
+inline CTestSecureFSSession::CTestSecureFSSession()
+	{}
+inline CTestSecureFSserver& CTestSecureFSSession::Server()
+	{return *static_cast<CTestSecureFSserver*>(const_cast<CServer2*>(CSession2::Server()));}
+inline TBool CTestSecureFSSession::ReceivePending() const
+	{return !iReceive.IsNull();}
+
+//
+
+void CTestSecureFSSession::CreateL()
+//
+// 2nd phase construct for sessions - called by the CServer framework
+//
+	{
+	//RDebug::Print(_L("Server::CTestSecureFSSession::CreateL - start"));
+
+	Server().AddSession();
+	//RDebug::Print(_L("Server::CTestSecureFSSession::CreateL - end"));
+	}
+
+CTestSecureFSSession::~CTestSecureFSSession()
+	{
+	Server().DropSession();
+	}
+
+void CTestSecureFSSession::Send(const TDesC& aMessage)
+//
+// Deliver the message to the client, truncating if required
+// If the write fails, panic the client, not the sender
+//
+	{
+	if (ReceivePending())
+		{
+		TPtrC m(aMessage);
+		if (iReceive.Int1()<aMessage.Length())
+			m.Set(m.Left(iReceive.Int1()));
+		TInt r=iReceive.Write(0,m);
+		if (r==KErrNone)
+			iReceive.Complete(KErrNone);
+		else
+			PanicClient(iReceive,EPanicBadDescriptor);
+		}
+	}
+
+void CTestSecureFSSession::ServiceL(const RMessage2& aMessage)
+//
+// Handle a client request.
+// Leaving is handled by CMyServer::ServiceError() which reports
+// the error code to the client
+//
+	{
+	TInt result = KErrNone;
+
+	switch (aMessage.Function())
+		{
+	case ETestIpcSetHomeTime:
+		DoSetHomeTime(aMessage);
+		break;
+
+	case ETestIpcDeleteFile:
+		result = DoDeleteFileL(aMessage);
+		break;
+	
+	case ETestIpcKillProcess:
+		DoKillProcess(aMessage);
+		break;
+
+	case ETestIpcChangeLocale:
+		result = DoChangeLocale(aMessage);
+		break;
+		
+	case ETestIpcCheckForFile:
+	    result = DoCheckForFile(aMessage);
+	    break;
+	    
+	case ETestIpcCopyFile:
+	    result = DoCopyFile(aMessage);
+	    break; 
+	    
+	case ETestIpcSetUpFbs:
+	    DoSetUpFbs(); 
+	    break;
+	     
+	default:
+		PanicClient(aMessage,EPanicIllegalFunction);
+		break;
+		}
+	aMessage.Complete(result);
+	}
+
+//
+
+void CTestSecureFSSession::DoSetHomeTime(const RMessage2& aMessage)
+	{
+	TPckgBuf<TTime> pckg;
+	aMessage.Read(0,pckg);
+	User::SetHomeTime(pckg());
+	}
+
+TInt CTestSecureFSSession::DoDeleteFileL(const RMessage2& aMessage)
+	{
+	RFs fs;
+	TFileName* const fileName=new(ELeave) TFileName;
+	CleanupStack::PushL(fileName);
+	User::LeaveIfError(fs.Connect());
+
+	CleanupClosePushL(fs);
+	aMessage.ReadL(0,*fileName);
+	TInt err=fs.Delete(*fileName);
+	if (!(err==KErrNone || err==KErrNotFound || err==KErrPathNotFound)) // ignore not found error
+		{
+		User::Leave(err);
+		}
+	CleanupStack::PopAndDestroy(&fs);
+	CleanupStack::PopAndDestroy(fileName);
+	return err;
+	}
+
+void CTestSecureFSSession::DoKillProcess(const RMessage2& aMessage)
+	{
+	TFullName* name = new(ELeave) TFullName;
+	CleanupStack::PushL(name);
+
+	aMessage.ReadL(0,*name);
+	TFindProcess* finder = new (ELeave) TFindProcess(*name);
+	CleanupStack::PushL(finder);
+	RProcess* process = new (ELeave) RProcess;
+	CleanupStack::PushL(process);
+
+	if (finder->Next(*name) == KErrNone)
+		{
+		if (process->Open(*name) == KErrNone)
+			{
+			process->Kill(KErrNone);
+			}
+		}
+
+	if (process != NULL)
+		{
+		process->Close();
+		}
+	CleanupStack::PopAndDestroy(process);
+	CleanupStack::PopAndDestroy(finder);
+	CleanupStack::PopAndDestroy(name);		
+	}
+
+
+TInt CTestSecureFSSession::DoChangeLocale(const RMessage2& aMessage)
+	{
+	TBuf<50> locname;
+	TInt result;
+	aMessage.ReadL(0,locname);
+
+	result = UserSvr::ChangeLocale(locname);
+
+	return result;
+	}
+
+TInt CTestSecureFSSession::DoCheckForFile(const RMessage2& aMessage)
+{
+    RFs fs;
+    TInt err;
+	TFileName* const fileName=new(ELeave) TFileName;
+	CleanupStack::PushL(fileName);
+	User::LeaveIfError(fs.Connect());
+
+	CleanupClosePushL(fs);
+	aMessage.ReadL(0,*fileName);
+	
+	TUint attribs;
+	err=fs.Att(*fileName, attribs);
+	fs.Close();
+		
+	CleanupStack::PopAndDestroy(&fs);
+	CleanupStack::PopAndDestroy(fileName);
+	return err;
+	
+}
+
+TInt CTestSecureFSSession::DoCopyFile(const RMessage2& aMessage)
+{
+
+    RFs fs;
+    TInt result;
+ 
+    User::LeaveIfError(fs.Connect());
+    CleanupClosePushL(fs);
+
+    TFileName fileSource;
+    TFileName fileDest;
+
+    aMessage.ReadL(0,fileSource);
+    aMessage.ReadL(1,fileDest);
+    	   
+	CFileMan* fileMan = NULL;
+	
+	fileMan = CFileMan::NewL(fs);
+	CleanupStack::PushL( fileMan );
+	
+	fs.MkDirAll(fileDest);
+	result = fileMan->Copy( fileSource, fileDest, CFileMan::EOverWrite );
+	
+	User::LeaveIfError(fs.Connect());
+	fs.SetAtt(fileDest,KEntryAttNormal,KEntryAttReadOnly);
+	fs.Close();
+
+    CleanupStack::PopAndDestroy(fileMan);
+    CleanupStack::PopAndDestroy(&fs);
+	return result;
+	
+}
+
+void CTestSecureFSSession::DoSetUpFbs()
+{
+//	FbsStartup();
+//    User::LeaveIfError( RFbsSession::Connect() );
+//   CleanupStack::PushL( TCleanupItem( TCleanupOperation(&RFbsSession::Disconnect ), NULL ) );
+}
+
+//
+
+void CTestSecureFSSession::ServiceError(const RMessage2& aMessage,TInt aError)
+//
+// Handle an error from CMySession::ServiceL()
+// 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,EPanicBadDescriptor);
+	CSession2::ServiceError(aMessage,aError);
+	}
+
+void CTestSecureFSshutdown::RunL()
+//
+// Initiate server exit when the timer expires
+//
+	{
+	CActiveScheduler::Stop();
+	}
+
+CServer2* CTestSecureFSserver::NewLC()
+	{
+	CTestSecureFSserver* self=new(ELeave) CTestSecureFSserver;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CTestSecureFSserver::ConstructL()
+//
+// 2nd phase construction - ensure the timer and server objects are running
+//
+	{
+	StartL(KTestServerName);
+	iShutdown.ConstructL();
+	// ensure that the server still exits even if the 1st client fails to connect
+	iShutdown.Start();
+	}
+
+
+CSession2* CTestSecureFSserver::NewSessionL(const TVersion&,const RMessage2&) const
+//
+// Cretae a new client session. This should really check the version number.
+//
+	{
+	return new(ELeave) CTestSecureFSSession();
+	}
+
+void CTestSecureFSserver::AddSession()
+//
+// A new session is being created
+// Cancel the shutdown timer if it was running
+//
+	{
+	++iSessionCount;
+	iShutdown.Cancel();
+	}
+
+void CTestSecureFSserver::DropSession()
+//
+// A session is being destroyed
+// Start the shutdown timer if it is the last session.
+//
+	{
+	if (--iSessionCount==0)
+		iShutdown.Start();
+	}
+
+void CTestSecureFSserver::Send(const TDesC& aMessage)
+//
+// Pass on the signal to all clients
+//
+	{
+	iSessionIter.SetToFirst();
+	CSession2* s;
+	while ((s=iSessionIter++)!=0)
+		static_cast<CTestSecureFSSession*>(s)->Send(aMessage);
+	}
+
+void PanicClient(const RMessage2& aMessage,TTestPanic aPanic)
+//
+// RMessage::Panic() also completes the message. This is:
+// (a) important for efficient cleanup within the kernel
+// (b) a problem if the message is completed a second time
+//
+	{
+	_LIT(KPanic,"TestServer");
+ 	aMessage.Panic(KPanic,aPanic);
+	}
+
+
+
+/**
+Perform all 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(KTestServerName));
+	// create and install the active scheduler we need
+	CActiveScheduler* s=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(s);
+	CActiveScheduler::Install(s);
+	CTestSecureFSserver::NewLC(); // create the server (leave it on the cleanup stack)
+	RProcess::Rendezvous(KErrNone);
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy(2); 	// Cleanup the server and scheduler
+	}
+
+
+
+
+TInt E32Main()
+//
+// Server process entry-point
+//
+	{
+	__UHEAP_MARK;
+	//
+	RDebug::Print(_L("Server::E32Main Version 0.0.0"));
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+	TInt r=KErrNoMemory;
+	if (cleanup)
+		{
+		TRAP(r,RunServerL());
+		delete cleanup;
+		}
+	//
+	__UHEAP_MARKEND;
+	return r;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Src/SmokeTestTimeOutTimer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,59 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// SmokeTestTimeOutTimer.h
+// This contains CTestTimeOutTimer
+// 
+//
+
+#include "SmokeTestTimeOutTimer.h"
+
+//
+// Construction/Destruction
+//
+
+EXPORT_C CTestTimeOutTimer::~CTestTimeOutTimer()
+	{
+	}
+
+EXPORT_C CTestTimeOutTimer* CTestTimeOutTimer::NewL(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority)
+	{
+	CTestTimeOutTimer*	self=NewLC(aTestTimerCallback, aPriority);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C CTestTimeOutTimer* CTestTimeOutTimer::NewLC(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority)
+	{
+	CTestTimeOutTimer*	self=new(ELeave) CTestTimeOutTimer(aTestTimerCallback, aPriority);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestTimeOutTimer::CTestTimeOutTimer(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority)
+:	CTimer(aPriority)
+,	iTestTimerCallback(aTestTimerCallback)
+	{
+	}
+
+void CTestTimeOutTimer::ConstructL()
+	{
+	CTimer::ConstructL();
+	CActiveScheduler::Add(this);
+	}
+
+void CTestTimeOutTimer::RunL()
+	{
+	iTestTimerCallback.TimerCompleted();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Src/TestStepSmokeTest.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,345 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestStepSmokeTest
+// 
+//
+
+//user include
+#include "TestStepSmokeTest.h"
+
+//Epoc include
+#include <testconfigfileparser.h>
+#include <f32file.h>
+#include <e32std.h>
+
+/*@{*/
+_LIT(KExpectedCapCheckResult,	"ExpectedCapCheckResult");
+_LIT(KConfigFile,				"C:\\plattest\\platsec\\plattest_capabilities.config");
+_LIT(KDefault,					"default");
+_LIT(KCapTest,					"CapabilityTest");
+_LIT(KNo,						"No");
+
+_LIT(KLogging,					"logging");
+_LIT(KLoggingMin,				"min");
+_LIT(KLoggingNormal,			"normal");
+_LIT(KLoggingMax,				"max");
+
+_LIT(KRepetition,				"repetition");
+/*@}*/
+
+//
+// Construction/Destruction
+//
+
+/**
+ Constructor
+*/
+EXPORT_C CTestStepSmokeTest::CTestStepSmokeTest()
+:	CTestStep()
+,	iLoggingDetail(ETestLoggingDetail_Normal)
+,	iRepetition(1)
+	{
+	}
+
+/**
+ Destructor
+*/
+EXPORT_C CTestStepSmokeTest::~CTestStepSmokeTest()
+	{
+	}
+
+	
+/**
+ The overriden implementation of CTestStep::doTestStepPreambleL()
+ @return TVerdict- result of the test step
+ @leave - system wide error codes
+*/
+EXPORT_C TVerdict CTestStepSmokeTest::doTestStepPreambleL()
+	{
+	TVerdict ret = CTestStep::doTestStepPreambleL();
+
+	//	Get logging
+	TPtrC	logging;
+	if ( GetStringFromConfig(ConfigSection(), KLogging, logging) )
+		{
+		INFO_PRINTF2(_L("Logging value %S"), &logging);
+		if ( logging.Compare(KLoggingMin) == 0 )
+			{
+			iLoggingDetail=ETestLoggingDetail_Min;
+			}
+		else if ( logging.Compare(KLoggingNormal) == 0 )
+			{
+			iLoggingDetail=ETestLoggingDetail_Normal;
+			}
+		else if ( logging.Compare(KLoggingMax) == 0 )
+			{
+			iLoggingDetail=ETestLoggingDetail_Max;
+			}
+		else
+			{
+			ERR_PRINTF1(_L("Illegal logging value, use min, normal or max."));
+			ret=EFail;
+			}
+		}
+
+	//	Get repetition count of test
+	GetIntFromConfig(ConfigSection(), KRepetition, iRepetition);
+	INFO_PRINTF2(_L("Repetition %d"), iRepetition);
+
+	return ret;
+	}
+
+/**
+ The overriden implementation of CTestStep::doTestStepPostambleL()
+ It implements the functionality of capability checking if
+ _PLATTEST_CAPTEST_ is ON.
+ @return TVerdict- result of the test step
+ @leave - system wide error codes
+*/
+
+EXPORT_C TVerdict CTestStepSmokeTest::doTestStepPostambleL()
+	{
+
+	//Read whether to do capability testing..
+	TPtrC captest(KNo);
+	GetStringFromConfig(KDefault, KCapTest, captest);
+	if( captest.Compare(_L("YES")) == 0)
+		{
+		INFO_PRINTF1(_L("---Capability Testing---"));
+		//Gets the capabilities config file
+		TBuf<KMaxTestExecuteCommandLength> scriptFile;
+		scriptFile.Copy(KConfigFile);
+		INFO_PRINTF2(_L("The config file %S"), &scriptFile);
+	
+		TBuf8<KMaxTestExecuteCommandLength> scriptSection;
+		scriptSection.Copy(_L("Capabilities"));
+			
+		TPtrC serverName = GetServerName();
+		INFO_PRINTF2(_L("The server name is  %S"), &serverName);
+		HBufC8 *scriptItem = HBufC8::NewLC(serverName.Length());
+		scriptItem->Des().Copy(serverName);
+		 
+		//Get the file server session object
+		RFs		rFs;
+		TInt	err=rFs.Connect();
+		if(err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Failed to connect with File server"));
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			CleanupClosePushL(rFs);
+			//Get the config file
+			CTestConfig* configFile = CTestConfig::NewLC(rFs, KNullDesC, scriptFile);
+			if( configFile == NULL)
+				{
+				WARN_PRINTF1(_L("NO Config file found -- Plattest_capabilites.config"));
+				}
+			else
+				{
+				//Get the item value from config file
+				TBuf8<KMaxTestExecuteCommandLength> itemValue;
+				itemValue = configFile->Section(scriptSection)->Item(scriptItem->Des())->Value();
+				TLex8 capabilityParser(itemValue);
+				TBool capCheckResult= ETrue;
+				
+				while(!capabilityParser.Eos())
+					{
+					//Parse the capabilities
+					TPtrC8 capability(capabilityParser.NextToken());
+								
+					HBufC* capabilityRead = HBufC::NewLC(capability.Length());
+					capabilityRead->Des().Copy(capability);
+					INFO_PRINTF2(_L("Capability Read is %S"), capabilityRead);
+					
+					//Get the capability value
+					TCapability capabilityValue;
+					TPtrC ptrCapabilty(capabilityRead->Des());
+					TInt err = GetCapability(ptrCapabilty, capabilityValue);
+					if( err != KErrNone)
+						{
+						WARN_PRINTF1(_L("The capability is not found"));
+						}
+					else
+						{
+						//Check if the current process posses the required capability
+						if( !RProcess().HasCapability(capabilityValue) )
+							{
+							INFO_PRINTF2(_L("The capability %S is not possesed."), capabilityRead);
+							capCheckResult=EFalse;
+							}
+						else
+							{
+							INFO_PRINTF2(_L("The capability %S is possesed."), capabilityRead);
+							}
+						}
+					CleanupStack::PopAndDestroy(capabilityRead);
+					}
+					
+				//read the expected capability check result
+				TBool expectedCapCheckResult = ETrue;
+				GetBoolFromConfig(ConfigSection(), KExpectedCapCheckResult, expectedCapCheckResult);
+				INFO_PRINTF2(_L("The expected cap check result is %D"), expectedCapCheckResult);
+				INFO_PRINTF2(_L("The cap check result is %D"), capCheckResult);
+
+				if(expectedCapCheckResult == capCheckResult)
+					{
+					SetTestStepResult(EPass);
+					}
+				else
+					{
+					SetTestStepResult(EFail);
+					}
+				}
+			CleanupStack::PopAndDestroy(2, &rFs);
+			}
+		CleanupStack::PopAndDestroy(scriptItem);
+		if(TestStepError() == KErrPermissionDenied)
+			{
+			INFO_PRINTF1(_L(" The failure is due to Platform Security"));
+			}
+		}
+
+	TVerdict ret = CTestStep::doTestStepPostambleL();
+	return ret;
+	}
+
+/**
+ Get the capability id (enum value) for the capability name 
+ given as string.
+ @param aCapability - Capability name 
+ @param aCapabilityValue - value for the capability name
+ @return TInt - error codes
+ @leave - None
+*/
+EXPORT_C TInt CTestStepSmokeTest::GetCapability(TPtrC aCapability, TCapability& aCapabilityValue)
+	{
+	INFO_PRINTF2(_L("The capability get is %S"), &aCapability);
+	TInt	ret=KErrNone;
+
+	TBuf<KMaxTestExecuteCommandLength>	capCaseValue(aCapability);
+	capCaseValue.LowerCase();
+
+	if(!capCaseValue.Compare(_L("tcb" )))
+		{
+		aCapabilityValue=ECapabilityTCB;
+		}
+	else if(!capCaseValue.Compare(_L("commdd" )))
+		{
+		aCapabilityValue=ECapabilityCommDD;
+		}
+	else if(!capCaseValue.Compare(_L("powermgmt" )))
+		{
+		aCapabilityValue=ECapabilityPowerMgmt;
+		}
+	else if(!capCaseValue.Compare(_L("multimediadd" )))
+		{
+		aCapabilityValue=ECapabilityMultimediaDD;
+		}
+	else if(!capCaseValue.Compare(_L("readdevicedata" )))
+		{
+		aCapabilityValue=ECapabilityReadDeviceData;
+		}
+	else if(!capCaseValue.Compare(_L("writedevicedata" )))
+		{
+		aCapabilityValue=ECapabilityWriteDeviceData;
+		}
+	else if(!capCaseValue.Compare(_L("drm" )))
+		{
+		aCapabilityValue=ECapabilityDRM;
+		}
+	else if(!capCaseValue.Compare(_L("trustedui" )))
+		{
+		aCapabilityValue=ECapabilityTrustedUI;
+		}
+	else if(!capCaseValue.Compare(_L("protserv" )))
+		{
+		aCapabilityValue=ECapabilityProtServ;
+		}
+	else if(!capCaseValue.Compare(_L("diskadmin" )))
+		{
+		aCapabilityValue=ECapabilityDiskAdmin;
+		}
+	else if(!capCaseValue.Compare(_L("networkcontrol" )))
+		{
+		aCapabilityValue=ECapabilityNetworkControl;
+		}
+	else if(!capCaseValue.Compare(_L("allfiles" )))
+		{
+		aCapabilityValue=ECapabilityAllFiles;
+		}
+	else if(!capCaseValue.Compare(_L("swevent" )))
+		{
+		aCapabilityValue=ECapabilitySwEvent;
+		}
+	else if(!capCaseValue.Compare(_L("networkservices" )))
+		{
+		aCapabilityValue=ECapabilityNetworkServices;
+		}
+	else if(!capCaseValue.Compare(_L("localservices" )))
+		{
+		aCapabilityValue=ECapabilityLocalServices;
+		}
+	else if(!capCaseValue.Compare(_L("readuserdata" )))
+		{
+		aCapabilityValue=ECapabilityReadUserData;
+		}
+	else if(!capCaseValue.Compare(_L("writeuserdata")))
+		{
+		aCapabilityValue=ECapabilityWriteUserData;
+		}
+	else if(!capCaseValue.Compare(_L("location")))
+		{
+		aCapabilityValue=ECapabilityLocation;
+		}
+	else if(!capCaseValue.Compare(_L("none")))
+		{
+		aCapabilityValue=ECapability_None;
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Unrecognised capability %S, will be rejected"), &capCaseValue);
+		ret=KErrNotFound;
+		}
+
+	return ret;
+	}
+
+
+/**
+ Verifies the given time is nearly equal to current UTC time.
+ @param aTime - Time needs to be verified 
+ @return TBool - Returns ETrue if aTime is nearly equal to current UTC 
+ time, otherwise EFalse
+ @leave - None
+*/
+EXPORT_C TBool CTestStepSmokeTest::VerifyUTCTime(TTime aTime)
+	{
+	TTime homeTime;
+	TTimeIntervalSeconds utcOffset;
+
+	homeTime.HomeTime();
+	homeTime.SecondsFrom(aTime, utcOffset);
+	INFO_PRINTF2(_L("Calculated utcOffset: %D"), utcOffset.Int());
+	if(Abs<TInt>(utcOffset.Int()) <= (User::UTCOffset().Int()+120) 
+		&& Abs<TInt>(utcOffset.Int()) >= (User::UTCOffset().Int()-120))
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/bwins/SmokeTestSecureFSClientU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+	?ChangeLocaleName@RTestSecureFSclient@@QAEHABVTDesC16@@@Z @ 1 NONAME ; int RTestSecureFSclient::ChangeLocaleName(class TDesC16 const &)
+	?CheckForFile@RTestSecureFSclient@@QAEHABVTDesC16@@@Z @ 2 NONAME ; int RTestSecureFSclient::CheckForFile(class TDesC16 const &)
+	?Connect@RTestSecureFSclient@@QAEHXZ @ 3 NONAME ; int RTestSecureFSclient::Connect(void)
+	?CopyFile@RTestSecureFSclient@@QAEHABVTDesC16@@0@Z @ 4 NONAME ; int RTestSecureFSclient::CopyFile(class TDesC16 const &, class TDesC16 const &)
+	?DeleteFileL@RTestSecureFSclient@@QAEHABVTDesC16@@@Z @ 5 NONAME ; int RTestSecureFSclient::DeleteFileL(class TDesC16 const &)
+	?KillProcessL@RTestSecureFSclient@@QAEXABVTDesC16@@@Z @ 6 NONAME ; void RTestSecureFSclient::KillProcessL(class TDesC16 const &)
+	?SetHomeTime@RTestSecureFSclient@@QAEHABVTTime@@@Z @ 7 NONAME ; int RTestSecureFSclient::SetHomeTime(class TTime const &)
+	?SetUpFbs@RTestSecureFSclient@@QAEXXZ @ 8 NONAME ; void RTestSecureFSclient::SetUpFbs(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/bwins/SmokeTest_UtilsU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,23 @@
+EXPORTS
+	??0CTestProperty@@QAE@AAVCTestStep@@@Z @ 1 NONAME ; CTestProperty::CTestProperty(class CTestStep &)
+	??0CTestStepSmokeTest@@IAE@XZ @ 2 NONAME ; CTestStepSmokeTest::CTestStepSmokeTest(void)
+	??1CTestActive@@UAE@XZ @ 3 NONAME ; CTestActive::~CTestActive(void)
+	??1CTestProperty@@UAE@XZ @ 4 NONAME ; CTestProperty::~CTestProperty(void)
+	??1CTestStepSmokeTest@@UAE@XZ @ 5 NONAME ; CTestStepSmokeTest::~CTestStepSmokeTest(void)
+	??1CTestTimeOutTimer@@UAE@XZ @ 6 NONAME ; CTestTimeOutTimer::~CTestTimeOutTimer(void)
+	?Activate@CTestActive@@QAEXXZ @ 7 NONAME ; void CTestActive::Activate(void)
+	?GetCapability@CTestStepSmokeTest@@IAEHVTPtrC16@@AAW4TCapability@@@Z @ 8 NONAME ; int CTestStepSmokeTest::GetCapability(class TPtrC16, enum TCapability &)
+	?GetPropertyL@CTestProperty@@QAEHVTUid@@HAAH@Z @ 9 NONAME ; int CTestProperty::GetPropertyL(class TUid, int, int &)
+	?GetPropertyL@CTestProperty@@QAEHVTUid@@HAAVTDes16@@@Z @ 10 NONAME ; int CTestProperty::GetPropertyL(class TUid, int, class TDes16 &)
+	?GetPropertyL@CTestProperty@@QAEHVTUid@@HAAVTDes8@@@Z @ 11 NONAME ; int CTestProperty::GetPropertyL(class TUid, int, class TDes8 &)
+	?NewL@CTestActive@@SAPAV1@AAVMTestActiveCallback@@H@Z @ 12 NONAME ; class CTestActive * CTestActive::NewL(class MTestActiveCallback &, int)
+	?NewL@CTestTimeOutTimer@@SAPAV1@AAVMTestTimeOutTimerCallback@@H@Z @ 13 NONAME ; class CTestTimeOutTimer * CTestTimeOutTimer::NewL(class MTestTimeOutTimerCallback &, int)
+	?NewLC@CTestActive@@SAPAV1@AAVMTestActiveCallback@@H@Z @ 14 NONAME ; class CTestActive * CTestActive::NewLC(class MTestActiveCallback &, int)
+	?NewLC@CTestTimeOutTimer@@SAPAV1@AAVMTestTimeOutTimerCallback@@H@Z @ 15 NONAME ; class CTestTimeOutTimer * CTestTimeOutTimer::NewLC(class MTestTimeOutTimerCallback &, int)
+	?SetPropertyL@CTestProperty@@QAEHVTUid@@HABVTDesC16@@@Z @ 16 NONAME ; int CTestProperty::SetPropertyL(class TUid, int, class TDesC16 const &)
+	?SetPropertyL@CTestProperty@@QAEHVTUid@@HABVTDesC8@@@Z @ 17 NONAME ; int CTestProperty::SetPropertyL(class TUid, int, class TDesC8 const &)
+	?SetPropertyL@CTestProperty@@QAEHVTUid@@HH@Z @ 18 NONAME ; int CTestProperty::SetPropertyL(class TUid, int, int)
+	?VerifyUTCTime@CTestStepSmokeTest@@IAEHVTTime@@@Z @ 19 NONAME ; int CTestStepSmokeTest::VerifyUTCTime(class TTime)
+	?doTestStepPostambleL@CTestStepSmokeTest@@UAE?AW4TVerdict@@XZ @ 20 NONAME ; enum TVerdict CTestStepSmokeTest::doTestStepPostambleL(void)
+	?doTestStepPreambleL@CTestStepSmokeTest@@UAE?AW4TVerdict@@XZ @ 21 NONAME ; enum TVerdict CTestStepSmokeTest::doTestStepPreambleL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/eabi/SmokeTestSecureFSclientU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+	_ZN19RTestSecureFSclient11DeleteFileLERK7TDesC16 @ 1 NONAME
+	_ZN19RTestSecureFSclient11SetHomeTimeERK5TTime @ 2 NONAME
+	_ZN19RTestSecureFSclient12CheckForFileERK7TDesC16 @ 3 NONAME
+	_ZN19RTestSecureFSclient12KillProcessLERK7TDesC16 @ 4 NONAME
+	_ZN19RTestSecureFSclient16ChangeLocaleNameERK7TDesC16 @ 5 NONAME
+	_ZN19RTestSecureFSclient7ConnectEv @ 6 NONAME
+	_ZN19RTestSecureFSclient8CopyFileERK7TDesC16S2_ @ 7 NONAME
+	_ZN19RTestSecureFSclient8SetUpFbsEv @ 8 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/eabi/SmokeTest_UtilsU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,40 @@
+EXPORTS
+	_ZN11CTestActive4NewLER19MTestActiveCallbacki @ 1 NONAME
+	_ZN11CTestActive5NewLCER19MTestActiveCallbacki @ 2 NONAME
+	_ZN11CTestActive8ActivateEv @ 3 NONAME
+	_ZN11CTestActiveD0Ev @ 4 NONAME
+	_ZN11CTestActiveD1Ev @ 5 NONAME
+	_ZN11CTestActiveD2Ev @ 6 NONAME
+	_ZN13CTestProperty12GetPropertyLE4TUidiR5TDes8 @ 7 NONAME
+	_ZN13CTestProperty12GetPropertyLE4TUidiR6TDes16 @ 8 NONAME
+	_ZN13CTestProperty12GetPropertyLE4TUidiRi @ 9 NONAME
+	_ZN13CTestProperty12SetPropertyLE4TUidiRK6TDesC8 @ 10 NONAME
+	_ZN13CTestProperty12SetPropertyLE4TUidiRK7TDesC16 @ 11 NONAME
+	_ZN13CTestProperty12SetPropertyLE4TUidii @ 12 NONAME
+	_ZN13CTestPropertyC1ER9CTestStep @ 13 NONAME
+	_ZN13CTestPropertyC2ER9CTestStep @ 14 NONAME
+	_ZN13CTestPropertyD0Ev @ 15 NONAME
+	_ZN13CTestPropertyD1Ev @ 16 NONAME
+	_ZN13CTestPropertyD2Ev @ 17 NONAME
+	_ZN18CTestStepSmokeTest13GetCapabilityE7TPtrC16R11TCapability @ 18 NONAME
+	_ZN18CTestStepSmokeTest13VerifyUTCTimeE5TTime @ 19 NONAME
+	_ZN18CTestStepSmokeTest19doTestStepPreambleLEv @ 20 NONAME
+	_ZN18CTestStepSmokeTest20doTestStepPostambleLEv @ 21 NONAME
+	_ZN18CTestStepSmokeTestC2Ev @ 22 NONAME
+	_ZN18CTestStepSmokeTestD0Ev @ 23 NONAME
+	_ZN18CTestStepSmokeTestD1Ev @ 24 NONAME
+	_ZN18CTestStepSmokeTestD2Ev @ 25 NONAME
+	_ZN17CTestTimeOutTimer4NewLER25MTestTimeOutTimerCallbacki @ 26 NONAME
+	_ZN17CTestTimeOutTimer5NewLCER25MTestTimeOutTimerCallbacki @ 27 NONAME
+	_ZN17CTestTimeOutTimerD0Ev @ 28 NONAME
+	_ZN17CTestTimeOutTimerD1Ev @ 29 NONAME
+	_ZN17CTestTimeOutTimerD2Ev @ 30 NONAME
+	_ZTI11CTestActive @ 31 NONAME ; #<TI>#
+	_ZTI13CTestProperty @ 32 NONAME ; #<TI>#
+	_ZTI18CTestStepSmokeTest @ 33 NONAME ; #<TI>#
+	_ZTI17CTestTimeOutTimer @ 34 NONAME ; #<TI>#
+	_ZTV11CTestActive @ 35 NONAME ; #<VT>#
+	_ZTV13CTestProperty @ 36 NONAME ; #<VT>#
+	_ZTV18CTestStepSmokeTest @ 37 NONAME ; #<VT>#
+	_ZTV17CTestTimeOutTimer @ 38 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/group/SmokeTestSecureFSclient.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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:
+// TestSecureFSclient.mmp
+// 
+//
+
+TARGET			SmokeTestSecureFSclient.dll
+TARGETTYPE		dll
+CAPABILITY		All
+
+UID			0x1000008D  0x101FF347
+VENDORID 		0x70000001
+
+USERINCLUDE		..\Inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH		..\src
+SOURCE			SmokeTestSecureFSclient.cpp
+
+LIBRARY			euser.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/group/SmokeTestSecureFSserver.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+// 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:
+// TestSecureFSserver.mmp
+// 
+//
+
+
+UID			0x1000008D 0x101FF346
+VENDORID 0x70000001
+
+TARGET			SmokeTestSecureFSserver.exe
+TARGETTYPE		EXE
+CAPABILITY		ALL
+
+USERINCLUDE		..\Inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH		..\SRC
+SOURCE			SmokeTestSecureFSserver.cpp
+
+SOURCEPATH .
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/group/SmokeTest_Utils.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,48 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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			SmokeTest_Utils.dll
+TARGETTYPE		dll
+UID           	0x1000008D 0x101FF341
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		All -TCB
+
+SOURCEPATH		..\Src
+
+SOURCE			SmokeTestTimeOutTimer.cpp
+SOURCE			SmokeTestActive.cpp
+SOURCE			TestStepSmokeTest.cpp
+SOURCE			SmokeTestProperty.cpp
+
+USERINCLUDE		..\Inc
+USERINCLUDE		..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			TestExecuteUtils.lib 
+LIBRARY			TestExecuteLogClient.lib
+LIBRARY			TestConfigFileParser.lib
+
+// We're quite heavy on the stack... 4k in WinS isn't enough...
+EPOCSTACKSIZE	0x6000
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,31 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 test system build description file for self test suite
+// 
+//
+
+PRJ_TESTEXPORTS
+// For Emulator
+../Inc/SmokeTestTimeOutTimer.h			SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketesttimeouttimer.h)
+../Inc/SmokeTestActive.h					SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestactive.h)
+../Inc/TestStepSmokeTest.h			SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/teststepsmoketest.h)
+../Inc/SmokeTestProperty.h				SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestproperty.h)
+../Inc/SmokeTestSecureFSclientserver.h			SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestsecurefsclientserver.h)
+../Inc/SmokeTestSecureFSclient.h				SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestsecurefsclient.h)
+../Inc/SmokeTestSecureFSserver.h				SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestsecurefsserver.h)
+
+PRJ_TESTMMPFILES
+SmokeTestSecureFSclient.mmp
+SmokeTestSecureFSserver.mmp
+SmokeTest_Utils.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Group/Smoketest_Agenda.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,52 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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			Smoketest_Agenda_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7771
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+//CAPABILITY		WriteUserData ReadUserData
+CAPABILITY All -TCB
+
+
+SOURCEPATH		..\Src
+
+SOURCE			TestAgendaServer.cpp
+SOURCE			TestAgendaAddAppt.cpp
+SOURCE			TestAgendaBase.cpp
+SOURCE			TestAgendaCreateDB.cpp
+SOURCE			TestAgendaServerLaunchProgress.cpp
+
+USERINCLUDE		..\Inc ..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			apparc.lib
+LIBRARY			euser.lib
+LIBRARY			calinterimapi.lib
+LIBRARY			etext.lib
+LIBRARY			estor.lib
+LIBRARY			efsrv.lib
+LIBRARY			TestExecuteUtils.lib
+LIBRARY			TestExecuteLogClient.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For Agenda smoketest
+//
+ 
+
+ 
+PRJ_TESTEXPORTS
+
+../Scripts/Smoketest_Agenda.script	/epoc32/release/wins/udeb/z/autosmoketest/smoketest_agenda.script
+../Scripts/Smoketest_Agenda.script	/epoc32/release/wins/urel/z/autosmoketest/smoketest_agenda.script
+../Scripts/Smoketest_Agenda.script	/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_agenda.script
+../Scripts/Smoketest_Agenda.script	/epoc32/release/winscw/urel/z/autosmoketest/smoketest_agenda.script
+
+../TestData/Smoketest_Agenda.ini				/epoc32/release/wins/udeb/z/autosmoketest/smoketest_agenda.ini
+../TestData/Smoketest_Agenda.ini				/epoc32/release/wins/urel/z/autosmoketest/smoketest_agenda.ini
+../TestData/Smoketest_Agenda.ini				/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_agenda.ini
+../TestData/Smoketest_Agenda.ini				/epoc32/release/winscw/urel/z/autosmoketest/smoketest_agenda.ini
+
+
+PRJ_TESTMMPFILES
+Smoketest_Agenda.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Inc/TestAgendaAddAppt.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,37 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestAgendaCreateDB.h
+// This contains CTestAgendaAddAppt
+// 
+//
+
+#ifndef TEST_AGENDA_ADD_APPT_H
+#define TEST_AGENDA_ADD_APPT_H
+
+#include "TestAgendaBase.h"
+
+class CTestAgendaAddAppt : public CTestAgendaBase
+{
+public:
+	CTestAgendaAddAppt();
+	virtual ~CTestAgendaAddAppt();
+
+public:
+	virtual enum TVerdict doTestStepL( void );
+
+private:
+	void	AddEntriesL( void );
+};
+
+#endif /* TEST_AGENDA_ADD_APPT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Inc/TestAgendaBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaBase which is the base class for all
+// the Psd Agx suite test steps
+// 
+//
+
+#ifndef TEST_AGENDA_BASE_H
+#define TEST_AGENDA_BASE_H
+
+#include <test/testexecutestepbase.h>
+#include <calentryview.h>
+#include <gdi.h>
+
+
+
+//forward declarations
+class CCalSession;
+
+#define KMaxDateStringLength	30
+#define KMaxTimeStringLength	30
+
+#define KMaxDateStringLength	30
+#define KMaxTimeStringLength	30
+
+class CTestAgendaPicture :public MPictureFactory
+/**
+*  Picture class for the agenda model
+*/
+{
+/**************************************************************
+* An object of this class is used for setting the picture factory
+* of an Agenda model, although our code does not use any of the
+* functionality provided by this class, it is created with empty
+* implementation and set to satisfy the compiler as it uses
+* an assert macro to check if this object is set before saving
+* the agenda model entries into a file
+*************************************************************/
+
+public:
+	CTestAgendaPicture();
+	virtual ~CTestAgendaPicture();
+	virtual void NewPictureL(TPictureHeader& aHeader,const CStreamStore& aDeferredPictureStore)const;
+};
+
+
+class CTestAgendaBase : public CTestStep
+{
+public:
+	CTestAgendaBase();
+	~CTestAgendaBase();
+
+	virtual enum TVerdict	doTestStepPreambleL();
+	virtual enum TVerdict	doTestStepPostambleL();
+
+	CCalSession& CTestAgendaBase::CalSession();
+	void SetCalEntryView(CCalEntryView* calEntryViewPtr);
+
+protected:
+	void	CreateDatabaseL();
+	void	OpenDatabaseL();
+	void	CleanupDatabase();
+
+private:
+	CActiveScheduler*	iSchedular;
+	TBool				iEnteredBlocked;
+	TBool				iExitedBlocked;
+
+protected:
+    RFs					iFs;
+	TBool				iSessionConnected;
+	CCalEntryView*      iCalEntryViewBase;
+	/**
+	To store the models entries
+	*/
+	CFileStore*			iStore;
+	CCalSession*        iCalSession;
+};
+
+#endif /* TEST_AGENDA_BASE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Inc/TestAgendaCreateDB.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,34 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaCreateDB
+// 
+//
+
+#ifndef TEST_AGENDA_CREATE_DB_H
+#define TEST_AGENDA_CREATE_DB_H
+
+#include "TestAgendaBase.h"
+
+class CTestAgendaCreateDB : public CTestAgendaBase
+{
+public:
+	CTestAgendaCreateDB();
+	virtual ~CTestAgendaCreateDB();
+
+public:
+	virtual enum TVerdict doTestStepL( void );
+
+};
+
+#endif /* TEST_AGENDA_CREATE_DB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Inc/TestAgendaServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaServer
+// 
+//
+
+#ifndef TEST_AGENDA_SERVER_H
+#define TEST_AGENDA_SERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+class  CTestAgendaServer : public CTestServer
+{
+public:
+	static CTestAgendaServer*	NewL();
+	virtual CTestStep*			CreateTestStep(const TDesC& aStepName);
+
+private:
+	void	ConstructL();
+};
+
+#endif /* TEST_AGENDA_SERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Inc/TestAgendaServerLaunchProgress.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,75 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaServerLaunchProgress
+// 
+//
+
+#ifndef TEST_AGENDA_SERVER_LAUNCH_PROGRESS_H
+#define TEST_AGENDA_SERVER_LAUNCH_PROGRESS_H
+
+#include "TestAgendabase.h"
+#include <e32base.h>
+#include <calprogresscallback.h>
+
+
+//forward declaration
+//class CTestAgendaBase;
+class CCalEntryView;
+
+
+class CTestAgendaServerLaunchProgress : public CActive, private MCalProgressCallBack
+/**
+* This class provides an implementationfor the pure virtual functions
+* declared in MAgnProgressCallBack. The framework  makes calls to the
+* functions indidcating the status of the operation.
+*/
+{
+public:
+	static CTestAgendaServerLaunchProgress* NewL(CTestAgendaBase* aAgendaBase);
+	virtual ~CTestAgendaServerLaunchProgress();
+	void	Start();
+
+	//from CActive
+	virtual void	RunL();
+	virtual void	DoCancel();
+
+private:
+	CTestAgendaServerLaunchProgress(CTestAgendaBase* aAgendaBase);
+	void	ConstructL();
+
+	//from MAgnProgressCallBack
+	virtual void	Completed(TInt aError = KErrNone);
+	virtual void	Progress(TInt aPercentageCompleted);
+	virtual TBool NotifyProgress();
+
+private:
+	/**
+	pointer to the CTestAgendaBase object.
+	*/
+	CTestAgendaBase*			iAgendaBase;
+    CCalEntryView*              iCalEntryView;
+
+	/**
+	file in which the entries are present
+	*/
+	TPtrC						iFileName;
+
+	/**
+	file server session
+	*/
+	RFs							iFs;
+
+};
+
+#endif TEST_AGENDA_SERVER_LAUNCH_PROGRESS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Scripts/Smoketest_Agenda.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+//
+
+PRINT Run Agenda smoketest
+//
+RUN_UTILS MkDir c:\autoSmoketest\
+RUN_UTILS CopyFile z:\autosmoketest\smoketest_agenda.ini	c:\autosmoketest\smoketest_agenda.ini
+RUN_UTILS MakeReadWrite c:\autosmoketest\smoketest_agenda.ini
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\agenda.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Agenda_Server
+//
+START_TESTCASE 8981
+RUN_TEST_STEP 100	Smoketest_Agenda_Server	CreateDB	c:\autosmoketest\Smoketest_Agenda.ini	18920_CreateDB
+END_TESTCASE 8981
+START_TESTCASE 8979
+RUN_TEST_STEP 1000	Smoketest_Agenda_Server	AddAppt		c:\autosmoketest\Smoketest_Agenda.ini	24560_AddAppts
+END_TESTCASE 8979
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Src/TestAgendaAddAppt.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,191 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaAddAppt
+// 
+//
+
+#include <test/testexecuteclient.h>
+#include <calentry.h>
+#include <calalarm.h> 
+
+
+#include "TestAgendaAddAppt.h"
+
+_LIT(KCount,		"count");
+_LIT(KYear,			"year%d");
+_LIT(KMonth,		"month%d");
+_LIT(KDay,			"day%d");
+_LIT(KHour,			"hour%d");
+_LIT(KMinute,		"min%d");
+_LIT(KDuration,		"duration%d");
+_LIT(KMessage,		"message%d");
+_LIT(KAlarm,		"alarm%d");
+_LIT(KAlarmSound,	"alarmsound%d");
+
+// constructor
+CTestAgendaAddAppt::CTestAgendaAddAppt()
+	{
+	SetTestStepName(_L("AddAppt"));
+	}
+
+// destructor
+CTestAgendaAddAppt::~CTestAgendaAddAppt()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestAgendaAddAppt::doTestStepL( void )
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("TEST-> ADDING APPOINTMENT ENTRIES"));
+
+	OpenDatabaseL();
+	if ( TestStepResult() == EPass )
+		{
+		TRAPD(r, AddEntriesL());
+		if (r!=KErrNone)
+			SetTestStepResult(EFail);
+		}
+	CleanupDatabase();
+
+	// test steps return a result
+	return TestStepResult();
+	}
+	
+// Destroy the RPointerArray
+void DestroyRPointerArray(TAny* aPtr)
+        {
+        RPointerArray<CCalEntry>* self = static_cast<RPointerArray<CCalEntry>*> (aPtr);
+        self->ResetAndDestroy();
+        }
+
+
+void CTestAgendaAddAppt::AddEntriesL( void )
+	{
+	TInt	count=1;
+	if ( !GetIntFromConfig(ConfigSection(), KCount, count) )
+		count=1;
+
+	TBuf<KMaxTestExecuteCommandLength>	tempStore;
+	TInt	year;
+	TInt	month;
+	TInt	day;
+	TInt	hour;
+	TInt	minute;
+	TInt	duration;
+	TInt	alarm;
+	TPtrC	ptrAlarmSound;
+	TPtrC	ptrMessage;
+	TBuf<KMaxDateStringLength> dateString;
+	_LIT(KDateString,"%*E%*D%X%*N%*Y %1 %2 '%3");
+
+	RPointerArray<CCalEntry> array;
+    CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &array));
+
+	for (TInt entry=0; entry<count && TestStepResult() == EPass; )
+		{
+		TTime	today;
+		today.HomeTime();
+
+		tempStore.Format(KYear(), ++entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, year) )
+			year=today.DateTime().Year();
+
+		tempStore.Format(KMonth(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, month) )
+			month=today.DateTime().Month();
+
+		tempStore.Format(KDay(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, day) )
+			day=today.DateTime().Day();
+		else
+			--day;
+
+		tempStore.Format(KHour(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, hour) )
+			hour=today.DateTime().Hour();
+
+		tempStore.Format(KMinute(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, minute) )
+			minute=0;
+
+		tempStore.Format(KDuration(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, duration) )
+			duration=30;
+
+		tempStore.Format(KMessage(), entry);
+		GetStringFromConfig(ConfigSection(), tempStore, ptrMessage);
+
+		TTime		startTime(TDateTime(year, TMonth(month-1+EJanuary), day, hour, minute,0,0));
+		startTime.FormatL(dateString,KDateString);
+	  	INFO_PRINTF2(_L("Start date is  %S"), &dateString);
+
+		TTime		endTime = startTime + TTimeIntervalMinutes(duration);
+		endTime.FormatL(dateString,KDateString);
+	  	INFO_PRINTF2(_L("End date is  %S"), &dateString);
+
+		
+		HBufC8* uid = HBufC8::NewLC(255);
+		TPtr8 uidP = uid->Des();
+		uidP.Append(count);
+		
+		CCalEntry* calEntry = CCalEntry::NewL(CCalEntry::EAppt, uid, CCalEntry::EMethodNone, 0);
+		
+		CleanupStack::Pop(); //uid
+		CleanupStack::PushL(calEntry);
+		
+		TCalTime calStartTime, calEndTime;
+		
+		calStartTime.SetTimeLocalL(startTime);
+		calEndTime.SetTimeLocalL(endTime);
+		
+		calEntry->SetStartAndEndTimeL(calStartTime, calEndTime);
+		
+		tempStore.Format(KAlarm(), entry);
+		if ( GetIntFromConfig(ConfigSection(), tempStore, alarm) )
+			{
+			TTimeIntervalMinutes	currentTime((hour*60) + minute);
+			TTimeIntervalMinutes	alarmTime(currentTime.Int());
+			
+			CCalAlarm* calAlarm = CCalAlarm::NewL();
+			CleanupStack::PushL(calAlarm);
+			
+			calAlarm->SetTimeOffset(alarmTime);
+			
+			tempStore.Format(KAlarmSound(), entry);
+			if ( GetStringFromConfig(ConfigSection(), tempStore, ptrAlarmSound) )
+				calAlarm->SetAlarmSoundNameL(ptrAlarmSound);
+			else
+				calAlarm->SetAlarmSoundNameL(_L("Bells"));
+			
+			calEntry->SetAlarmL(calAlarm);
+			CleanupStack::PopAndDestroy(); //calAlarm
+			}
+		//Store in the array
+		array.AppendL(calEntry);
+		
+		CleanupStack::Pop(); //calEntry
+		}
+		INFO_PRINTF1(_L("About to store appointments now"));
+		TInt success(0);
+		TRAPD(storeError, iCalEntryViewBase->StoreL(array, success));
+		INFO_PRINTF2(_L("Store result is %d"), storeError);
+		if (success != count && storeError == KErrNone)
+		    {
+			SetTestStepResult(EFail);
+		    } 
+		
+		CleanupStack::PopAndDestroy(&array);
+		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Src/TestAgendaBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,225 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaCase which is the base class for all the Agenda TestCase DLL
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <test/testexecutelog.h>
+#include "TestAgendabase.h"
+#include "TestAgendaServerLaunchProgress.h"
+
+#include <calsession.h>
+
+
+
+_LIT(KDef,		"default");
+_LIT(KFileName,		"filenameSecure");
+
+void CTestAgendaPicture::NewPictureL(TPictureHeader& /*aHeader*/,const CStreamStore& /*aDeferredPictureStore*/)const
+/**
+Creates a new Picture object for use by agenda model, currently the implementation is empty as our code
+does not use any the functionality.
+*/
+	{
+	//empty implementation
+	}
+
+CTestAgendaPicture::CTestAgendaPicture()
+/**
+constructor, currently the implementation is empty
+*/
+	{
+	//empty implementation
+	}
+
+CTestAgendaPicture::~CTestAgendaPicture()
+/**
+destructor, currently the implementation is empty
+*/
+	{
+	//empty implementation
+	}
+
+CTestAgendaBase::CTestAgendaBase()
+: CTestStep()
+, iSchedular(NULL)
+, iEnteredBlocked(EFalse)
+, iExitedBlocked(EFalse)
+, iSessionConnected(EFalse)
+, iCalEntryViewBase(NULL)
+, iStore(NULL)
+, iCalSession(NULL)
+	{
+	}
+
+// destructor
+CTestAgendaBase::~CTestAgendaBase()
+	{
+	delete iSchedular;
+	iSchedular=NULL;
+	
+	}
+
+enum TVerdict CTestAgendaBase::doTestStepPreambleL()
+	{
+	TVerdict	ret = CTestStep::doTestStepPreambleL();
+	
+	INFO_PRINTF1(_L("doTestStepPreambleL"));
+	iSchedular=new (ELeave) CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+	
+	iCalSession = CCalSession::NewL();
+
+	return ret;
+	}
+
+enum TVerdict CTestAgendaBase::doTestStepPostambleL()
+	{
+	
+	delete iCalEntryViewBase;
+	iCalEntryViewBase=NULL;
+	
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+	
+
+	return CTestStep::doTestStepPostambleL();
+	}
+
+// Create a new database
+void CTestAgendaBase::CreateDatabaseL( void )
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if ( !returnValue )
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+	
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		}
+	else
+		{
+		User::Leave(KErrNotFound);
+		}
+
+	//	Connect file server
+	User::LeaveIfError(iFs.Connect());
+	iSessionConnected=ETrue;
+	
+	TInt r;
+	if (iCalSession)
+	    {
+		TRAP(r, iCalSession->CreateCalFileL(ptrFileName));
+	    }
+	    
+	if (r == KErrAlreadyExists)
+	    {
+		TRAP_IGNORE(iCalSession->DeleteCalFileL(ptrFileName));
+		TRAP(r, iCalSession->CreateCalFileL(ptrFileName));
+	    }
+
+        
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		ERR_PRINTF2(_L("Creating Agenda file failed with error %d"), r);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CTestAgendaBase::OpenDatabaseL( void )
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if ( !returnValue )
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+	
+
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		}
+	else
+		{
+		User::Leave(KErrNotFound);
+		}
+
+	//	Connect file server
+	User::LeaveIfError(iFs.Connect());
+	iSessionConnected=ETrue;
+
+    
+	if (iCalSession)
+	    {
+		iCalSession->OpenL(ptrFileName);
+	    }	
+    
+	//open the database by creating an object of CTestAgendaServerLaunchProgress
+	CTestAgendaServerLaunchProgress*	progress = CTestAgendaServerLaunchProgress::NewL(this);
+	CleanupStack::PushL(progress);
+
+	//kick start the launching process
+	progress->Start();
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy(progress);
+
+	}
+
+void CTestAgendaBase::CleanupDatabase( void )
+	{
+	if (iCalEntryViewBase)
+	    {
+		delete iCalEntryViewBase;
+		iCalEntryViewBase = NULL;
+	    }
+
+/*	if (iCalSession)
+		{
+		delete iCalSession;
+		iCalSession=NULL;
+		}*/
+
+
+	if (iSessionConnected)
+		{
+		iFs.Close();
+		iSessionConnected=EFalse;
+		}
+	}
+	
+void CTestAgendaBase::SetCalEntryView(CCalEntryView* calEntryViewPtr)
+    {
+	iCalEntryViewBase = calEntryViewPtr;
+    }
+
+CCalSession& CTestAgendaBase::CalSession()
+    {
+	if (iCalSession)
+	    {
+		return *iCalSession;
+	    }
+	else
+	    {
+	    iCalSession = CCalSession::NewL();
+	    
+	    return *iCalSession;	
+	    }
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Src/TestAgendaCreateDB.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,43 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaCreateDB
+// 
+//
+
+#include <test/testexecutelog.h>
+
+#include "TestAgendaCreateDB.h"
+
+// constructor
+CTestAgendaCreateDB::CTestAgendaCreateDB()
+	{
+	SetTestStepName(_L("CreateDB"));
+	}
+
+// destructor
+CTestAgendaCreateDB::~CTestAgendaCreateDB()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestAgendaCreateDB::doTestStepL( void )
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("TEST-> CREATING OUR AGENDA DATABASE"));
+
+	CreateDatabaseL();
+
+	// test steps return a result
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Src/TestAgendaServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,107 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 main DLL entry point for the Smoketest_Agenda.dll
+// 
+//
+
+
+// EPOC includes
+#include <e32base.h>
+
+#include "TestAgendaServer.h"
+#include "TestAgendaAddAppt.h"
+#include "TestAgendaCreateDB.h"
+
+
+_LIT(KServerName,"Smoketest_Agenda_Server");
+
+CTestAgendaServer* CTestAgendaServer::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.
+ */
+	{
+	CTestAgendaServer*	server = new (ELeave) CTestAgendaServer();
+	CleanupStack::PushL(server);
+	// CServer base class call
+	server->StartL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler*	sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CTestAgendaServer*	server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTestAgendaServer::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* CTestAgendaServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep*	testStep = NULL;
+
+	if(aStepName == _L("AddAppt"))
+		testStep = new CTestAgendaAddAppt();
+	else if(aStepName == _L("CreateDB"))
+		testStep = new CTestAgendaCreateDB(); 
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Src/TestAgendaServerLaunchProgress.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,120 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaServerLaunchProgress
+// 
+//
+
+#include "TestAgendaServerLaunchProgress.h"
+#include <calentryview.h>
+
+CTestAgendaServerLaunchProgress* CTestAgendaServerLaunchProgress::NewL(CTestAgendaBase* aAgendaBase)
+/**
+ * @return - Instance of the agenda progress callback
+ */
+	{
+	CTestAgendaServerLaunchProgress*	progress = new (ELeave) CTestAgendaServerLaunchProgress(aAgendaBase);
+	CleanupStack::PushL(progress);
+	progress->ConstructL();
+	CleanupStack::Pop(progress);
+	return progress;
+	}
+
+CTestAgendaServerLaunchProgress::CTestAgendaServerLaunchProgress(CTestAgendaBase* aAgendaBase)
+:	CActive(EPriorityStandard)
+,	iAgendaBase(aAgendaBase)
+/**
+constructor
+*/
+	{
+	}
+
+void CTestAgendaServerLaunchProgress::ConstructL()
+/**
+constructor
+*/
+	{
+	//adding this active object into an active scheduler
+	CActiveScheduler::Add(this);
+	}
+
+CTestAgendaServerLaunchProgress::~CTestAgendaServerLaunchProgress()
+/**
+destructor
+*/
+	{
+ 	}
+
+void CTestAgendaServerLaunchProgress::Completed(TInt aError)
+/**
+callback function invoked after the file is completely loaded.
+@param	TInt aError
+*/
+	{
+	if(aError != KErrNone)
+		{
+		iAgendaBase ->INFO_PRINTF2(_L("Opening the agenda database file failed with error %D"),aError);
+		iAgendaBase ->SetTestStepResult(EFail);
+		}
+	else
+		{
+		iAgendaBase ->INFO_PRINTF1(_L("Opening the Agenda database succesful"));
+		}
+		CActiveScheduler::Stop();
+	}
+
+void CTestAgendaServerLaunchProgress::Progress(TInt aPercentageCompleted)
+/**
+callback function invoked to indicate the progress
+@param aPercentageCompleted percent file loaded
+*/
+	{
+	//log the progress percentage of saving the entries
+	iAgendaBase ->INFO_PRINTF2(_L("%D%% completed opening the agenda database"),aPercentageCompleted);
+	}
+
+TBool CTestAgendaServerLaunchProgress::NotifyProgress()
+    {
+	return ETrue;
+    }
+    
+void CTestAgendaServerLaunchProgress::RunL()
+/**
+RunL from CActive class, opens the agenda database file, and builds the indices
+@leave system wide error code
+*/
+	{
+	CCalEntryView* calEntryViewPtr = CCalEntryView::NewL(iAgendaBase->CalSession(), *this);
+	iAgendaBase->SetCalEntryView(calEntryViewPtr);
+	}
+
+void CTestAgendaServerLaunchProgress::DoCancel()
+/**
+DoCancel of the active object
+*/
+	{
+	iAgendaBase ->INFO_PRINTF1(_L("Inside do cancel of the active object"));
+	}
+
+
+void CTestAgendaServerLaunchProgress::Start(void)
+/**
+starts the saving process
+*/
+	{
+	TRequestStatus *threadStatus=&iStatus;
+	User::RequestComplete(threadStatus,KErrNone);
+	SetActive();
+	}
+	
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/Src/sm_agenda.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1 @@
+[Files MRU]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/agenda/TestData/Smoketest_Agenda.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,35 @@
+[default]
+filename		=c:\smoketest\Smoketest_Agenda
+filenameSecure		=c:Smoketest_Agenda
+
+[18920_CreateDB]
+
+[24560_AddAppts]
+count			=3
+
+year1			=2002
+month1			=9
+day1			=15
+hour1			=9
+min1			=0
+duration1		=15
+message1		=make a cup of tea
+
+year2			=2002
+month2			=9
+day2			=16
+hour2			=14
+min2			=0
+duration2		=60
+message2		=football
+alarm2			=15
+
+year3			=2002
+month3			=9
+day3			=15
+hour3			=12
+min3			=0
+duration3		=30
+message3		=have lunch
+alarm3			=15
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/autorom/smoketests.oby	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,48 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __SMOKETESTS_IBY__
+#define __SMOKETESTS_IBY__
+
+#include "testexecute.iby"  
+#include "thindump.iby"
+ 
+
+
+file=ABI_DIR\DEBUG_DIR\runtests.exe				\sys\bin\runtests.exe
+file=ABI_DIR\BUILD_DIR\smoketest_agenda_server.exe	\sys\bin\smoketest_agenda_server.exe
+file=ABI_DIR\BUILD_DIR\smoketest_contacts_server.exe	\sys\bin\smoketest_contacts_server.exe
+file=ABI_DIR\BUILD_DIR\smoketest_mess_server.exe	\sys\bin\smoketest_mess_server.exe
+file=ABI_DIR\BUILD_DIR\smoketest_timew_server.exe	\sys\bin\smoketest_timew_server.exe 
+
+//required by messaging tests
+file=ABI_DIR\BUILD_DIR\SmokeTest_Utils.dll	\sys\bin\SmokeTest_Utils.dll
+file=ABI_DIR\BUILD_DIR\testconfigfileparser.dll \bin\testconfigfileparser.dll  
+ 
+
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_agenda.script \autosmoketest\smoketest_agenda.script 
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_agenda.ini \autosmoketest\smoketest_agenda.ini 
+
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_contacts.script \autosmoketest\smoketest_contacts.script 
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_contacts.ini \autosmoketest\smoketest_contacts.ini 
+
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_mess.script \autosmoketest\smoketest_mess.script 
+data = \epoc32\release\winscw\udeb\z\autosmoketest\sms\message1.txt \autosmoketest\sms\message1.txt 
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_mess.ini \autosmoketest\smoketest_mess.ini 
+
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_timew.script \autosmoketest\smoketest_timew.script 
+data = \epoc32\release\winscw\udeb\z\autosmoketest\smoketest_timew.ini \autosmoketest\smoketest_timew.ini 
+ 
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/TestData/Smoketest_Contacts.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+[default]
+filename		=c:\autosmoketest\smoketest_contacts.cdb
+filenameSecure		=c:smoketest_contacts.cdb
+
+[18807_CreateDB]
+
+[18927_AddEntries]
+count			=5
+
+firstname1		=Feroz
+lastname1		=Uddin
+company1		=Symbian
+job1			=Cricket fan
+workphone1		=0207
+workemail1		=feroz.uddin@symbian.com
+
+firstname2		=Louis
+lastname2		=Nayegon
+company2		=Symbian
+job2			=Lazy Git
+workphone2		=01452 812178
+workemail2		=louis.nayegon@symbian.com
+
+firstname3		=Alf
+lastname3		=Garnett
+company3		=BBC
+job3			=star
+workphone3		=0207 777
+workmobile3		=07790
+homephone3		=0208 888
+homemobile3		=07792
+fax3			=0208 999
+workemail3		=alf.garnett@bbc.co.uk
+internet3		=www.bbc.co.uk
+street3			=Marylebone Road
+town3			=London
+county3			=LondonCounty
+postcode3		=W1
+country3		=England
+notes3			=Small minded bigot
+
+firstname4		=Tom
+lastname4		=Jones
+company4		=Music
+job4			=Singer
+workemail4		=tom.jones@music.com
+
+firstname5		=Alan
+lastname5		=Shearer
+company5		=Newcastle United FC
+job5			=Footballer
+FirstNamePrn5	=Al-an
+LastNamePrn5	=Shea-rer
+CompanyNamePrn5	=New-cas-el You-Nigh-Ted
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/group/Smoketest_Contacts.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,52 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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			Smoketest_Contacts_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7772
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		ReadUserData WriteUserData
+
+SOURCEPATH		..\Src
+
+SOURCE			SmoketestContactsServer.cpp
+SOURCE			TestContact.cpp
+SOURCE			TestContactsAddEntries.cpp
+SOURCE			TestContactsBase.cpp
+SOURCE			TestContactsCreateDB.cpp
+
+USERINCLUDE		..\Inc ..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			efsrv.lib
+LIBRARY			estor.lib
+LIBRARY			charconv.lib
+LIBRARY			cntview.lib
+LIBRARY			euser.lib
+LIBRARY			cntmodel.lib
+LIBRARY			TestExecuteUtils.lib
+LIBRARY			TestExecuteLogClient.lib
+
+// We're quite heavy on the stack... 4k in WinS isn't enough...
+EPOCSTACKSIZE	0x6000
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,32 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+// For automated contacts smoketest
+//
+ 
+
+PRJ_TESTEXPORTS
+
+../scripts/Smoketest_Contacts.script		/epoc32/release/wins/udeb/z/autosmoketest/smoketest_contacts.script
+../scripts/Smoketest_Contacts.script		/epoc32/release/wins/urel/z/autosmoketest/smoketest_contacts.script
+../scripts/Smoketest_Contacts.script		/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_contacts.script
+../scripts/Smoketest_Contacts.script		/epoc32/release/winscw/urel/z/autosmoketest/smoketest_contacts.script
+ 
+
+../TestData/Smoketest_Contacts.ini			/epoc32/release/wins/udeb/z/autosmoketest/smoketest_contacts.ini
+../TestData/Smoketest_Contacts.ini			/epoc32/release/wins/urel/z/autosmoketest/smoketest_contacts.ini
+../TestData/Smoketest_Contacts.ini			/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_contacts.ini
+../TestData/Smoketest_Contacts.ini			/epoc32/release/winscw/urel/z/autosmoketest/smoketest_contacts.ini
+
+PRJ_TESTMMPFILES
+Smoketest_Contacts.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/inc/SmoketestContactsServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,36 @@
+/**
+* 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"
+* which accompanies 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 SmoketestContactsServer.h
+*/
+#if (!defined __SMOKETESTCONTACTS_SERVER_H__)
+#define __SMOKTETESTCONTACTS_SERVER_H__
+#include <test/testexecuteserverbase.h>
+
+class CSmoketestContactsServer : public CTestServer
+	{
+public:
+	static CSmoketestContactsServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+
+private:
+	void ConstructL();
+	};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/inc/TestContact.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,100 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContact
+// 
+//
+
+#ifndef TEST_CONTACT_H
+#define TEST_CONTACT_H
+
+#include <cntitem.h>
+
+class MTestContactInstrumentation
+{
+public:
+	virtual void			RaiseInstrumentationEventNotificationL(TInt aEventTag) = 0;
+};
+
+class CTestContact : public CBase
+	{
+public:
+	static CTestContact*	NewL(CContactItem& aSeedContact);
+	static CTestContact*	NewLC(CContactItem& aSeedContact);
+	static CTestContact*	NewL(CContactItem* aSeedContact);
+	static CTestContact*	NewLC(CContactItem* aSeedContact);
+	~CTestContact();
+
+	CContactItem&	ContactItem();
+	const TPtrC		FirstNameL();
+	const TPtrC		LastNameL();
+	const TPtrC		CompanyNameL();
+	const TPtrC		JobTitleL();
+	const TPtrC		WorkPhoneL();
+	const TPtrC		WorkMobileL();
+	const TPtrC		HomePhoneL();
+	const TPtrC		HomeMobileL();
+	const TPtrC		FaxL();
+	const TPtrC		EmailAddressL();
+	const TPtrC		InternetAddressL();
+	const TPtrC		StreetL();
+	const TPtrC		TownL();
+	const TPtrC		CountyL();
+	const TPtrC		PostCodeL();
+	const TPtrC		CountryL();
+	const TPtrC		NotesL();
+	const TPtrC		NickNameL();
+	const TPtrC		PictureL();
+
+	void	SetFirstNameL(const TDesC& aFirstName);
+	void	SetLastNameL(const TDesC& aLastName);
+	void	SetCompanyNameL(const TDesC& aCompanyName);
+	void	SetJobTitleL(const TDesC& aJobTitle);
+	void	SetWorkPhoneL(const TDesC& aWorkPhone);
+	void	SetWorkMobileL(const TDesC& aWorkMobile);
+	void	SetHomePhoneL(const TDesC& aHomePhone);
+	void	SetHomeMobileL(const TDesC& aHomeMobile);
+	void	SetFaxL(const TDesC& aFax);
+	void	SetHomeEmailAddressL(const TDesC& aEmailAddress);
+	void	SetWorkEmailAddressL(const TDesC& aEmailAddress);
+	void	SetInternetAddressL(const TDesC& aInternetAddress);
+	void	SetStreetL(const TDesC& aStreet);
+	void	SetTownL(const TDesC& aTown);
+	void	SetCountyL(const TDesC& aCounty);
+	void	SetPostCodeL(const TDesC& aPostCode);
+	void	SetCountryL(const TDesC& aCountry);
+	void	SetNotesL(const TDesC& aNotes);
+	void	SetNickNameL(const TDesC& aNickName);
+	void 	SetPictureL(const TDesC8& aPicture);
+
+private:
+	CTestContact();
+	void				ConstructL(CContactItem& aSeedContact);
+	void				ConstructL(CContactItem* aSeedContact);
+	const TPtrC			TextFieldL(TFieldType aFieldType) const;
+	const TPtrC			TextFieldL(const CContentType& aTypesToMatch) const;
+  	void 				SetTextFieldL(const CContentType& aTypesToMatch,const TDesC& aText) const;
+  	void 				SetTextFieldL(TFieldType aFieldType, const TDesC& aText);
+  	void 				SetTextFieldL(TFieldType aFieldType, const TDesC& aText, TUid aAddOnContentType);
+	CContactItemField&	FindFieldL(TFieldType aFieldType) const;
+	CContactItemField&	FindFieldL(const CContentType& aTypesToMatch) const;
+	void SetPictureFieldL(const TDesC8& aPicture) const;
+	TInt FindField(TFieldType aFieldType) const;
+  	void InsertTextFieldL(TUid aID, const TDesC& aStringOfStuff);
+
+private:
+	CContactItem*	iContactItem;
+	TBool			iDestroyOnExit;
+	};
+
+#endif /* __TEST_CONTACT_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/inc/TestContactsAddEntries.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,35 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestSuiteContacts
+// 
+//
+
+#ifndef TEST_CONTACTS_ADD_ENTRIES_H
+#define TEST_CONTACTS_ADD_ENTRIES_H
+
+#include "TestContactsBase.h"
+
+class CTestContactsAddEntries : public CTestContactsBase
+{
+public:
+	CTestContactsAddEntries();
+	virtual ~CTestContactsAddEntries();
+
+	virtual enum TVerdict doTestStepL( void );
+
+private:
+	void	AddEntriesL( void );
+};
+
+#endif TEST_CONTACTS_ADD_ENTRIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/inc/TestContactsBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,53 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsBase
+// 
+//
+
+#ifndef TEST_CONTACTS_BASE_H
+#define TEST_CONTACTS_BASE_H
+
+
+#include <cntdb.h>
+#include <test/testexecutestepbase.h>
+#include <cntitem.h>
+
+#include "TestContact.h"
+
+const TInt KMaxScriptLineLength = 200;
+
+class CTestContactsBase : public CTestStep, protected MTestContactInstrumentation
+{
+public:
+	CTestContactsBase();
+	~CTestContactsBase();
+	virtual enum TVerdict	doTestStepPreambleL();
+	virtual enum TVerdict	doTestStepPostambleL();
+
+protected:
+	void				CreateDatabase();
+	void				OpenDatabase();
+	void				CleanupDatabase();
+	void				RaiseInstrumentationEventNotificationL(TInt aEventTag);
+	CContactIdArray*	SearchEntriesL();
+
+protected:
+	CContactDatabase*			iDatabase;
+	CContactItemFieldDef*		iFieldDef;
+
+private:
+	CActiveScheduler*			iSchedular;
+};
+
+#endif /* TEST_CONTACTS_BASE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/inc/TestContactsCreateDB.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsCreateDB
+// 
+//
+
+#ifndef TEST_CONTACTS_CREATE_DB_H
+#define TEST_CONTACTS_CREATE_DB_H
+
+#include "TestContactsBase.h"
+
+class CTestContactsCreateDB : public CTestContactsBase
+{
+public:
+	CTestContactsCreateDB();
+	virtual ~CTestContactsCreateDB();
+
+	virtual enum TVerdict doTestStepL( void );
+
+};
+
+#endif /* TEST_CONTACTS_CREATE_DB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/scripts/Smoketest_Contacts.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+//
+
+PRINT Run Contacts smoketest
+//
+RUN_UTILS MkDir c:\smoketest\
+RUN_UTILS CopyFile z:\smoketest\smoketest_contacts.ini	c:\autosmoketest\smoketest_contacts.ini
+RUN_UTILS MakeReadWrite c:\smoketest\smoketest_contacts.ini
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\contacts.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Contacts_Server
+//
+START_TESTCASE 9094
+RUN_TEST_STEP 100	Smoketest_Contacts_Server	CreateDB		c:\autosmoketest\Smoketest_Contacts.ini	18807_CreateDB
+END_TESTCASE 9094
+START_TESTCASE 9082
+RUN_TEST_STEP 1000	Smoketest_Contacts_Server	AddEntries		c:\autosmoketest\Smoketest_Contacts.ini	18927_AddEntries
+END_TESTCASE 9082
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/src/SmoketestContactsServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,108 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 SmoketestContactsServer.cpp
+*/
+
+#include "SmoketestContactsServer.h"
+#include "TestContactsCreateDB.h"
+#include "TestContactsAddEntries.h"
+
+// __EDIT_ME__ - Substitute the name of the test server
+_LIT(KServerName,"Smoketest_Contacts_Server");
+// __EDIT_ME__ - Use your own server class name
+CSmoketestContactsServer* CSmoketestContactsServer::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.
+ */
+	{
+	CSmoketestContactsServer * server = new (ELeave) CSmoketestContactsServer();
+	CleanupStack::PushL(server);
+	// CServer base class call
+	server->StartL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CSmoketestContactsServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CSmoketestContactsServer::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());
+        
+        if (!err) { }
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+
+// __EDIT_ME__ - Use your own server class name
+CTestStep* CSmoketestContactsServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+// __EDIT_ME__ - Create your own test steps here
+	if(aStepName == _L("AddEntries"))
+		testStep = new CTestContactsAddEntries();
+	if(aStepName == _L("CreateDB"))
+		testStep = new CTestContactsCreateDB();
+
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/src/TestContact.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,491 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContact
+// 
+//
+
+#include <cntfldst.h>
+
+#include "TestContact.h"
+
+CTestContact* CTestContact::NewL(CContactItem& aSeedContact)
+	{
+	CTestContact* self=CTestContact::NewLC(aSeedContact);
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestContact* CTestContact::NewLC(CContactItem& aSeedContact)
+	{
+	CTestContact* self=new(ELeave) CTestContact();
+	CleanupStack::PushL(self);
+	self->ConstructL(aSeedContact);
+	return self;
+	}
+
+CTestContact* CTestContact::NewL(CContactItem* aSeedContact)
+	{
+	CTestContact* self=CTestContact::NewLC(aSeedContact);
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestContact* CTestContact::NewLC(CContactItem* aSeedContact)
+	{
+	CTestContact* self=new(ELeave) CTestContact();
+	CleanupStack::PushL(self);
+	self->ConstructL(aSeedContact);
+	return self;
+	}
+
+CTestContact::CTestContact() : iDestroyOnExit(EFalse)
+	{
+	}
+
+void CTestContact::ConstructL(CContactItem& aSeedContact)
+	{
+	iDestroyOnExit=ETrue;
+	iContactItem=CContactCard::NewL(&aSeedContact);
+	}
+
+void CTestContact::ConstructL(CContactItem* aSeedContact)
+	{
+	iDestroyOnExit=EFalse;
+	iContactItem=aSeedContact;
+	}
+
+CTestContact::~CTestContact()
+	{
+	if (iDestroyOnExit)
+		delete iContactItem;
+	iContactItem=NULL;
+	}
+
+CContactItem& CTestContact::ContactItem()
+	{
+	return *iContactItem;
+	}
+
+const TPtrC CTestContact::FirstNameL()
+	{
+	return TextFieldL(KUidContactFieldGivenName);
+	}
+
+const TPtrC CTestContact::LastNameL()
+	{
+	return TextFieldL(KUidContactFieldFamilyName);
+	}
+
+const TPtrC CTestContact::CompanyNameL()
+	{
+	return TextFieldL(KUidContactFieldCompanyName);
+	}
+
+const TPtrC CTestContact::JobTitleL()
+	{
+	return TextFieldL(KUidContactFieldJobTitle);
+	}
+
+const TPtrC CTestContact::WorkPhoneL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::WorkMobileL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::HomePhoneL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::HomeMobileL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::FaxL()
+	{
+	return TextFieldL(KUidContactFieldFax);
+	}
+
+const TPtrC CTestContact::EmailAddressL()
+	{
+	return TextFieldL(KUidContactFieldEMail);
+	}
+
+const TPtrC CTestContact::InternetAddressL()
+	{
+	return TextFieldL(KUidContactFieldUrl);
+	}
+
+const TPtrC CTestContact::StreetL()
+	{
+	return TextFieldL(KUidContactFieldAddress);
+	}
+
+const TPtrC CTestContact::TownL()
+	{
+	return TextFieldL(KUidContactFieldLocality);
+	}
+
+const TPtrC CTestContact::CountyL()
+	{
+	return TextFieldL(KUidContactFieldRegion);
+	}
+
+const TPtrC CTestContact::PostCodeL()
+	{
+	return TextFieldL(KUidContactFieldPostcode);
+	}
+
+const TPtrC CTestContact::CountryL()
+	{
+	return TextFieldL(KUidContactFieldCountry);
+	}
+
+const TPtrC CTestContact::NotesL()
+	{
+	return TextFieldL(KUidContactFieldNote);
+	}
+
+const TPtrC CTestContact::NickNameL()
+	{
+	return TextFieldL(KUidContactFieldSecondName);
+	}
+
+const TPtrC CTestContact::PictureL()
+	{
+	return TextFieldL(KUidContactFieldPicture);
+	}
+
+void CTestContact::SetFirstNameL(const TDesC& aFirstName)
+	{
+ 	SetTextFieldL(KUidContactFieldGivenName, aFirstName, KUidContactFieldVCardMapUnusedN);
+	}
+
+void CTestContact::SetLastNameL(const TDesC& aLastName)
+	{
+ 	SetTextFieldL(KUidContactFieldFamilyName, aLastName, KUidContactFieldVCardMapUnusedN);
+	}
+
+void CTestContact::SetCompanyNameL(const TDesC& aCompanyName)
+	{
+	SetTextFieldL(KUidContactFieldCompanyName, aCompanyName, KUidContactFieldVCardMapORG);
+	}
+
+void CTestContact::SetJobTitleL(const TDesC& aJobTitle)
+	{
+	SetTextFieldL(KUidContactFieldJobTitle,aJobTitle);
+	}
+
+void CTestContact::SetWorkPhoneL(const TDesC& aWorkPhone)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	SetTextFieldL(*contentType,aWorkPhone);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetWorkMobileL(const TDesC& aWorkMobile)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	SetTextFieldL(*contentType,aWorkMobile);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetHomePhoneL(const TDesC& aHomePhone)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	SetTextFieldL(*contentType,aHomePhone);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetHomeMobileL(const TDesC& aHomeMobile)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	SetTextFieldL(*contentType,aHomeMobile);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetFaxL(const TDesC& aFax)
+	{
+	SetTextFieldL(KUidContactFieldFax,aFax);
+	}
+
+void CTestContact::SetHomeEmailAddressL(const TDesC& aEmailAddress)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldEMail);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	SetTextFieldL(*contentType,aEmailAddress);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+void CTestContact::SetWorkEmailAddressL(const TDesC& aEmailAddress)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldEMail);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	SetTextFieldL(*contentType,aEmailAddress);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+
+void CTestContact::SetInternetAddressL(const TDesC& aInternetAddress)
+	{
+	SetTextFieldL(KUidContactFieldUrl,aInternetAddress);
+	}
+
+void CTestContact::SetStreetL(const TDesC& aStreet)
+	{
+	SetTextFieldL(KUidContactFieldAddress,aStreet);
+	}
+
+void CTestContact::SetTownL(const TDesC& aTown)
+	{
+	SetTextFieldL(KUidContactFieldLocality,aTown);
+	}
+
+void CTestContact::SetCountyL(const TDesC& aCounty)
+	{
+	SetTextFieldL(KUidContactFieldRegion,aCounty);
+	}
+
+void CTestContact::SetPostCodeL(const TDesC& aPostCode)
+	{
+	SetTextFieldL(KUidContactFieldPostcode,aPostCode);
+	}
+
+void CTestContact::SetCountryL(const TDesC& aCountry)
+	{
+	SetTextFieldL(KUidContactFieldCountry,aCountry);
+	}
+
+void CTestContact::SetNotesL(const TDesC& aNotes)
+	{
+	SetTextFieldL(KUidContactFieldNote,aNotes);
+	}
+
+void CTestContact::SetNickNameL(const TDesC& aNickName)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldSecondName);
+	TRAPD(err, SetTextFieldL(*contentType,aNickName));
+        if (!err) { }
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetPictureL(const TDesC8& aPicture)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPicture);
+	SetPictureFieldL(aPicture);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+const TPtrC CTestContact::TextFieldL(TFieldType aFieldType) const
+	{
+	CContactItemField& field=FindFieldL(aFieldType);
+	ASSERT(field.StorageType()==KStorageTypeText);
+	return STATIC_CAST(CContactTextField*,(field.Storage()))->Text();
+	}
+
+const TPtrC CTestContact::TextFieldL(const CContentType& aTypesToMatch) const
+	{
+	CContactItemField& field=FindFieldL(aTypesToMatch);
+	ASSERT(field.StorageType()==KStorageTypeText);
+	return STATIC_CAST(CContactTextField*,field.Storage())->Text();
+	}
+
+void CTestContact::InsertTextFieldL(TFieldType aID, const TDesC& aStringOfStuff )
+	{
+ 	CContactItemField* itemFieldPtr = NULL;
+ 	CContactTextField* textStoragePtr = NULL;
+
+ 	itemFieldPtr = CContactItemField::NewLC( KStorageTypeText, aID );
+ 	textStoragePtr = itemFieldPtr->TextStorage(); // we don't have ownership here, hence no stack.
+
+ 	textStoragePtr->SetTextL( aStringOfStuff );
+ 	textStoragePtr = NULL; // we've finished with this ptr now.
+
+ 	iContactItem->AddFieldL( *itemFieldPtr ); // hand ownership over here
+ 	CleanupStack::Pop( itemFieldPtr ); // and pop,
+	}
+
+void CTestContact::SetTextFieldL(TFieldType aFieldType,const TDesC& aText)
+	{
+ 	TInt	fieldIndex=FindField(aFieldType);
+
+ 	if ( fieldIndex > KErrNotFound )
+		{
+ 		CContactItemField&	field=FindFieldL(aFieldType);
+ 		ASSERT(field.StorageType()==KStorageTypeText);
+ 		STATIC_CAST(CContactTextField*,field.Storage())->SetText(aText.AllocL());
+		}
+ 	else
+		{
+ 		InsertTextFieldL(aFieldType, aText);
+		}
+	}
+
+void CTestContact::SetTextFieldL(const CContentType& aTypesToMatch,const TDesC& aText) const
+	{
+	CContactItemField& field=FindFieldL(aTypesToMatch);
+	ASSERT(field.StorageType()==KStorageTypeText);
+	STATIC_CAST(CContactTextField*,field.Storage())->SetText(aText.AllocL());
+	}
+
+CContactItemField& CTestContact::FindFieldL(TFieldType aFieldType) const
+	{
+	CContactItemFieldSet& fields=iContactItem->CardFields();
+	TInt index=fields.Find(aFieldType);
+	User::LeaveIfError(index);
+	return fields[index];
+	}
+
+void CTestContact::SetTextFieldL(TFieldType aFieldType, const TDesC& aText, TUid aAddOnContentType)
+	{
+	CContactItemFieldSet& fields = iContactItem->CardFields();
+	CContactTextField* textField = NULL;
+	TInt fieldIndex = 0;
+
+	fieldIndex = FindField( aFieldType );
+
+	if (fieldIndex == KErrNotFound )
+		{
+		InsertTextFieldL( aFieldType, aText );
+		fieldIndex = FindField( aFieldType );
+		CContactItemField& field = fields[ fieldIndex ];
+		field.AddFieldTypeL( aAddOnContentType );
+		}
+		else if (fieldIndex >= KErrNone )
+		{
+		CContactItemField& field = fields[ fieldIndex ];
+		ASSERT(field.StorageType()==KStorageTypeText);
+		textField = static_cast<CContactTextField*>(field.Storage());
+		textField->SetText( aText.AllocL() );
+		field.AddFieldTypeL( aAddOnContentType );
+		}
+	}
+
+TInt CTestContact::FindField(TFieldType aFieldType) const
+	{
+	return iContactItem->CardFields().Find( aFieldType );
+	}
+
+CContactItemField& CTestContact::FindFieldL(const CContentType& aTypesToMatch) const
+	{
+	CContactItemFieldSet& fields=iContactItem->CardFields();
+	const TInt numTypesToMatch(aTypesToMatch.FieldTypeCount());
+	const TFieldType mainFieldType(aTypesToMatch.FieldType(0));
+	TInt index=-1;
+	FOREVER
+		{
+		index=fields.FindNext(mainFieldType,index+1);
+		User::LeaveIfError(index);
+
+		CContactItemField& thisPhoneField=fields[index];
+		const CContentType& thisPhoneFieldTypes=thisPhoneField.ContentType();
+		const TInt numFieldTypes(thisPhoneFieldTypes.FieldTypeCount());
+
+		if (numFieldTypes!=numTypesToMatch)
+			{
+			continue;
+			}
+
+		TInt numTypesLeftToMatch=numTypesToMatch;
+		for (TInt ii=0;ii<numFieldTypes;++ii)
+			{
+			TFieldType thisFieldType(thisPhoneFieldTypes.FieldType(ii));
+			for (TInt jj=0;jj<numTypesToMatch;++jj)
+				{
+				TFieldType thisFieldTypeToMatch(aTypesToMatch.FieldType(jj));
+				if (thisFieldType==thisFieldTypeToMatch)
+					{
+					if (--numTypesLeftToMatch<=0)
+						{
+						return thisPhoneField;
+						}
+
+					break;
+					}
+				}
+			}
+		}
+	}
+
+void CTestContact::SetPictureFieldL(const TDesC8& aPicture) const
+	{
+
+	CContactItemFieldSet& fieldSet=iContactItem->CardFields();
+	TInt pos;
+	pos=fieldSet.Find(KUidContactFieldPicture);
+	User::LeaveIfError(pos);
+	fieldSet[pos].StoreStorage()->SetThingL(aPicture);
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/src/TestContactsAddEntries.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,408 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsAddEntries
+// 
+//
+
+// Epoc include
+#include <test/testexecutelog.h>
+
+// User include
+#include "TestContactsAddEntries.h"
+#include "TestContact.h"
+
+/*@{*/
+// Literal constants
+_LIT(KCardTemplateName,	"TestTemplate");
+_LIT(KCount,			"count");
+_LIT(KFirstName,		"firstname%d");
+_LIT(KLastName,			"lastname%d");
+_LIT(KCompanyName,		"company%d");
+_LIT(KJobTitle,			"job%d");
+_LIT(KWorkPhone,		"workphone%d");
+_LIT(KWorkMobile,		"workmobile%d");
+_LIT(KHomePhone,		"homephone%d");
+_LIT(KHomeMobile,		"homemobile%d");
+_LIT(KFax,				"fax%d");
+_LIT(KWorkEmailAddress,	"workemail%d");
+_LIT(KInternetAddress,	"internet%d");
+_LIT(KStreet,			"street%d");
+_LIT(KTown,				"town%d");
+_LIT(KCounty,			"county%d");
+_LIT(KPostCode,			"postcode%d");
+_LIT(KCountry,			"country%d");
+_LIT(KNotes,			"notes%d");
+_LIT(KNickName,			"nickName%d");
+_LIT(KPictureName,		"picturename%d");
+_LIT(KGroupName,		"groupname%d");
+_LIT(KTemplateName,		"templatename%d");
+_LIT(KOneFieldTemplate,	"OneFieldTemplate");
+/*@}*/
+
+
+CTestContactsAddEntries::CTestContactsAddEntries()
+/**
+Default Constructor
+ */
+	{
+	SetTestStepName(_L("AddEntries"));
+	}
+
+CTestContactsAddEntries::~CTestContactsAddEntries()
+/**
+Destructor
+ */
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestContactsAddEntries::doTestStepL()
+/**
+invoked by the test execute framework for exercising the
+functionality under test
+@return	EPass: The test passed succesfully;
+		EFail: The test failed;
+		EInconclusive: The result of the test was inconclusive;
+		ETestSuiteError: Error in the test suite;
+		EAbort: The test was aborted;
+		EIgnore: The test was unexecuted
+@leave system wide error codes
+*/
+	{
+
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Contacts Add Entries Test"));
+
+	OpenDatabase();
+	if ( TestStepResult() == EPass )
+		{
+		TRAPD(r, AddEntriesL());
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Test step failed with error code = %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	CleanupDatabase();
+
+	// test steps return a result
+	return TestStepResult();
+	}
+
+void CTestContactsAddEntries::AddEntriesL()
+/**
+This function adds contact entries to the database depending on entry type.
+If the entry contains the group name then the contact will be added to the
+particular group specified in the entry. If the entry contains the template
+name then the contact item depending on the specified template name will be
+created and added to the database.
+
+@leave system wide error code
+ */
+	{
+	TBool	groupExists = EFalse;
+	TBool	templateFound = EFalse;
+	TInt	count=1;
+
+	if ( !GetIntFromConfig(ConfigSection(), KCount, count) )
+		{
+		count=1;
+		}
+
+	INFO_PRINTF2(_L("Number of Entries to Add = %d"), count);
+
+	TBuf<KMaxScriptLineLength>	tempStore;
+	TPtrC						ptrString;
+
+	/*******************************************************************
+	 To Create a contact card template depending upon the contact item
+	 on which the new template's field set is based. The template name
+	 on which the new template is based is read from the ini file.
+	 *******************************************************************/
+
+	for (TInt entry=0; entry<count; )
+		{
+		CContactItem* item = NULL;
+
+		// The entry contains the template name
+		tempStore.Format(KTemplateName(), ++entry);
+		if (!GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("Entry %d has no Template Name"), entry);
+			item = iDatabase->CreateContactCardTemplateLC(KCardTemplateName);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Template Name = %S"), &ptrString);
+			CContactIdArray* templateList = NULL;
+			CContactItem* tempTemplate = NULL;
+
+			// Returns a copy of the database's template ID list
+			templateList = iDatabase->GetCardTemplateIdListL();
+			CleanupStack::PushL(templateList);
+
+			// Returns the number of contact card templates that currently exist in the database.
+			TInt tCount = iDatabase->TemplateCount();
+			INFO_PRINTF2(_L("Number of existing templates = %d"), tCount);
+
+			// Search for template in the template ID list
+			for(TInt i = 0; i<tCount && templateFound == EFalse;i++)
+				{
+				// Reads a contact item
+				tempTemplate = STATIC_CAST(CContactItem*, iDatabase->ReadContactLC((*templateList)[i]));
+
+				// Gets the label for a contact card template.
+				TPtrC tempLabel = STATIC_CAST(CContactCardTemplate*,tempTemplate)->GetTemplateLabelL();
+
+							// Compare the template label
+				if(!(tempLabel.Compare(ptrString)))
+					{
+					INFO_PRINTF2(_L("Template %S found"), &tempLabel);
+
+					// Creates a contact card template and adds it to the database
+					item = iDatabase->CreateContactCardTemplateLC(tempTemplate,tempLabel);
+
+					// Compare the template label with OneFieldTemplate and add field to it.
+					if(!(tempLabel.Compare(KOneFieldTemplate)))
+						{
+						// Allocates and constructs a contact item field
+						CContactItemField* field=CContactItemField::NewLC(KStorageTypeText,KUidContactFieldGivenName);
+						item->AddFieldL(*field);
+						CleanupStack::Pop(field); // field
+						}
+					CleanupStack::Pop(item);
+					templateFound = ETrue;
+					}
+				  CleanupStack::PopAndDestroy(tempTemplate);
+				}
+
+			if (!templateFound)
+				{
+				ERR_PRINTF2(_L("Ini Template %S does not match existing templates"), &ptrString);
+				SetTestStepResult(EFail);
+				}
+
+			// Set templateFound to false for next entry
+			templateFound = EFalse;
+
+			CleanupStack::PopAndDestroy(templateList);
+			CleanupStack::PushL(item);
+			}
+
+		CTestContact*	contact=CTestContact::NewLC(*item);
+
+		tempStore.Format(KFirstName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("firstname = %S"), &ptrString);
+			contact->SetFirstNameL(ptrString);
+			}
+
+		tempStore.Format(KNickName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("NickName = %S"), &ptrString);
+			TRAPD(err, contact->SetNickNameL(ptrString));
+			if ( err != KErrNone )
+				{
+				ERR_PRINTF2(_L("SetNickNameL Leave = %d"), err);
+				SetTestStepResult(EFail);
+				}
+			}
+
+		tempStore.Format(KLastName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("lastname = %S"), &ptrString);
+			contact->SetLastNameL(ptrString);
+			}
+
+		tempStore.Format(KCompanyName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("company = %S"), &ptrString);
+			contact->SetCompanyNameL(ptrString);
+			}
+
+		tempStore.Format(KJobTitle(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("job = %S"), &ptrString);
+			contact->SetJobTitleL(ptrString);
+			}
+
+		tempStore.Format(KWorkPhone(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("work phone = %S"), &ptrString);
+			contact->SetWorkPhoneL(ptrString);
+			}
+
+		tempStore.Format(KWorkMobile(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("work mobile = %S"), &ptrString);
+			contact->SetWorkMobileL(ptrString);
+			}
+
+		tempStore.Format(KHomePhone(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("home phone = %S"), &ptrString);
+			contact->SetHomePhoneL(ptrString);
+			}
+
+		tempStore.Format(KHomeMobile(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("home mobile = %S"), &ptrString);
+			contact->SetHomeMobileL(ptrString);
+			}
+
+		tempStore.Format(KFax(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("fax = %S"), &ptrString);
+			contact->SetFaxL(ptrString);
+			}
+
+		tempStore.Format(KWorkEmailAddress(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("work email = %S"), &ptrString);
+			contact->SetWorkEmailAddressL(ptrString);
+			}
+
+		tempStore.Format(KInternetAddress(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("internet = %S"), &ptrString);
+			contact->SetInternetAddressL(ptrString);
+			}
+
+		tempStore.Format(KStreet(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("street = %S"), &ptrString);
+			contact->SetStreetL(ptrString);
+			}
+
+		tempStore.Format(KTown(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("town = %S"), &ptrString);
+			contact->SetTownL(ptrString);
+			}
+
+		tempStore.Format(KCounty(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("county = %S"), &ptrString);
+			contact->SetCountyL(ptrString);
+			}
+
+		tempStore.Format(KPostCode(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("post code = %S"), &ptrString);
+			contact->SetPostCodeL(ptrString);
+			}
+
+		tempStore.Format(KCountry(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("country = %S"), &ptrString);
+			contact->SetCountryL(ptrString);
+			}
+
+		tempStore.Format(KNotes(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("notes = %S"), &ptrString);
+			contact->SetNotesL(ptrString);
+			}
+
+		tempStore.Format(KPictureName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("Picture Name = %S"), &ptrString);
+
+			HBufC8*	pictureName8 = HBufC8::NewLC(ptrString.Length());
+			pictureName8->Des().Copy(ptrString);
+
+			contact->SetPictureL(*pictureName8);
+
+			CleanupStack::PopAndDestroy(pictureName8);
+			}
+
+		tempStore.Format(KGroupName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("Group Name = %S"), &ptrString);
+
+			// Flag for adding contacts to group.
+			groupExists = ETrue;
+			}
+
+		const TContactItemId id = iDatabase->AddNewContactL(contact->ContactItem());
+
+		/********************************************************************
+		This is for adding the contact entry to the specified group.
+		********************************************************************/
+		if(groupExists)
+			{
+			INFO_PRINTF1(_L("Adding Item "));
+			CContactIdArray* groupList = NULL;
+
+			// Returns a copy of the database's group ID list
+			groupList = iDatabase->GetGroupIdListL();
+			CleanupStack::PushL(groupList);
+
+			// Returns the number of groups that currently exist in the database
+			TInt groupCount = iDatabase->GroupCount();
+
+
+			// Search for the group
+			for(TInt i = 0; i<groupCount;i++)
+				{
+				// Reads a contact item
+				CContactGroup* group = STATIC_CAST(CContactGroup*, iDatabase->ReadContactLC((*groupList)[i]));
+
+				// Gets the contact item's ID.
+				const TContactItemId groupId1 = group->Id();
+
+				// Gets the group label.
+				TPtrC	label = group->GetGroupLabelL();
+				// Compare the group label with group name read from ini file.
+				if(!(label.Compare(ptrString)))
+					{
+					/**
+					Sets a contact item which already exists in the database
+					to be a member of a contact group
+					 */
+					iDatabase->AddContactToGroupL(id, groupId1);
+					INFO_PRINTF1(_L("Item added successfully"));
+					groupExists = EFalse;
+					}
+				CleanupStack::PopAndDestroy(group);
+
+				}
+			CleanupStack::PopAndDestroy(groupList);
+			}
+
+		CleanupStack::PopAndDestroy(contact);
+		CleanupStack::PopAndDestroy(item);
+
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/src/TestContactsBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,176 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 CTestContactsBase
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <test/testexecutelog.h>
+
+// User include
+#include "TestContactsBase.h"
+
+/*@{*/
+// Literal constants
+_LIT(KDef,			"default");
+_LIT(KFileName,		"filenameSecure");
+_LIT(KKey,			"key");
+/*@}*/
+
+
+// constructor
+CTestContactsBase::CTestContactsBase()
+:	iDatabase(NULL)
+,	iFieldDef(NULL)
+,	iSchedular(NULL)
+	{
+	}
+
+// destructor
+CTestContactsBase::~CTestContactsBase()
+	{
+	delete iFieldDef;
+	iFieldDef=NULL;
+
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+	}
+
+enum TVerdict CTestContactsBase::doTestStepPreambleL()
+	{
+	iSchedular=new (ELeave)CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+
+	iFieldDef=new(ELeave) CContactItemFieldDef;
+	iFieldDef->AppendL(KUidContactFieldFamilyName);
+	iFieldDef->AppendL(KUidContactFieldGivenName);
+	return CTestStep::doTestStepPreambleL();
+	}
+
+enum TVerdict CTestContactsBase::doTestStepPostambleL()
+	{
+	delete iFieldDef;
+	iFieldDef=NULL;
+
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+
+	return CTestStep::doTestStepPostambleL();
+	}
+
+// Create a new database
+void CTestContactsBase::CreateDatabase()
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if (!returnValue)
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+
+	//	Create database
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		TRAPD(r, iDatabase=CContactDatabase::ReplaceL(ptrFileName))
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Creating Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("No Contacts file specified. Open default file."));
+		TRAPD(r, iDatabase=CContactDatabase::ReplaceL())
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Creating Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	}
+
+void CTestContactsBase::OpenDatabase()
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if (!returnValue)
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+
+	//	Open database
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		RaiseInstrumentationEventNotificationL(17);
+		TRAPD(r, iDatabase=CContactDatabase::OpenL(ptrFileName));
+		RaiseInstrumentationEventNotificationL(18);
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Opening Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("No Contacts file specified. Open default file."));
+		RaiseInstrumentationEventNotificationL(17);
+		TRAPD(r, iDatabase=CContactDatabase::OpenL());
+		RaiseInstrumentationEventNotificationL(18);
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Opening Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	}
+
+void CTestContactsBase::CleanupDatabase()
+	{
+	delete iDatabase;
+	iDatabase=NULL;
+	}
+
+void CTestContactsBase::RaiseInstrumentationEventNotificationL(TInt aEventTag)
+	{
+	INFO_PRINTF2(_L("RaiseEventNotification %d"), aEventTag);
+	}
+
+CContactIdArray* CTestContactsBase::SearchEntriesL()
+/**
+This function searches in the contacts database and populates an array
+with ids' of the contacts which satisfy the search criterion
+read from the ini file.
+@return - Pointer to the contact ID array
+@leave system wide error code
+ */
+	{
+	TPtrC	ptrKey;
+	if (!GetStringFromConfig(ConfigSection(), KKey, ptrKey))
+		{
+		ERR_PRINTF1(_L("No key value for entry"));
+		SetTestStepResult(EFail);
+		}
+	INFO_PRINTF2(_L("Key Value for Entry Search = %S"), &ptrKey);
+
+	// The function searches the fields contained in the field definition
+	INFO_PRINTF1(_L("Searching through the database for entry"));
+
+	CContactIdArray*	ret=iDatabase->FindLC(ptrKey, iFieldDef);
+	CleanupStack::Pop(ret);
+	return ret;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/src/TestContactsCreateDB.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,42 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsCreateDB
+// 
+//
+
+#include <test/testexecutelog.h>
+
+#include "TestContactsCreateDB.h"
+
+CTestContactsCreateDB::CTestContactsCreateDB()
+	{
+	SetTestStepName(_L("CreateDB"));
+	}
+
+CTestContactsCreateDB::~CTestContactsCreateDB()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestContactsCreateDB::doTestStepL()
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Contacts CreateDB Test"));
+
+	CreateDatabase();
+	CleanupDatabase();
+
+	// test steps return a result
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/contacts/src/sm_contacts.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,2 @@
+[Files MRU]
+0=m:\src\common\generic\smoketest\agenda\src\TestAgendaServerLaunchProgress.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Group/Smoketest_Mess.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,83 @@
+// 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"
+// which accompanies 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			Smoketest_Mess_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7774
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		ReadUserData WriteUserData WriteDeviceData NetworkServices
+
+#if (defined _PLATTEST_CDMA_)
+MACRO			CDMA_API_ENABLED
+MACRO			GSM_COMPATIBILITY_MODE
+#endif
+
+SOURCEPATH		..\Src
+
+SOURCE			TestMessServer.cpp
+SOURCE			TestMessSession.cpp
+SOURCE			TestMessSharedData.cpp
+SOURCE			TestMessWatcher.cpp
+SOURCE			TestMessProcessor.cpp
+SOURCE			TestMessTimer.cpp
+SOURCE			TestMessBase.cpp
+SOURCE			TestMessCleanMessageFolder.cpp
+SOURCE			TestMessCreateSmsAccount.cpp
+SOURCE			TestMessSetDefaultSc.cpp
+SOURCE			TestMessCreateSMS.cpp
+SOURCE			TestMessCreateGsmSmsUtil.cpp
+#ifdef _PLATTEST_CDMA_
+SOURCE			TestMessCreateCdmaSmsUtil.cpp
+#endif
+SOURCE			TestMessCreateSmsUtilBase.cpp
+SOURCE			TestMessProcessExistingMsg.cpp
+SOURCE			TestMessEditEntry.cpp
+SOURCE			TestMessStoreProcessUtil.cpp
+SOURCE			TestMessEditEntryUtil.cpp
+SOURCE			TestMessPrintEntryUtil.cpp
+
+USERINCLUDE		..\Inc 
+USERINCLUDE		..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			etel.lib
+LIBRARY			schsend.lib
+LIBRARY			estor.lib
+LIBRARY			euser.lib
+LIBRARY			bafl.lib
+LIBRARY			msgs.lib
+LIBRARY			fbscli.lib
+LIBRARY			imcm.lib
+LIBRARY			efsrv.lib
+LIBRARY			sendas2.lib
+LIBRARY			etext.lib
+LIBRARY			smcm.lib
+
+LIBRARY			gsmu.lib
+LIBRARY			esock.lib
+LIBRARY			smsu.lib
+LIBRARY			TestExecuteUtils.lib 
+LIBRARY			TestExecuteLogClient.lib
+LIBRARY			SmokeTest_Utils.lib
+LIBRARY			etelmm.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 test system build description file for self test suite
+//
+ 
+
+PRJ_TESTEXPORTS
+ 
+ 
+../Scripts/Smoketest_Mess.script					/epoc32/release/wins/udeb/z/autosmoketest/smoketest_mess.script
+../Scripts/Smoketest_Mess.script					/epoc32/release/wins/urel/z/autosmoketest/smoketest_mess.script
+../Scripts/Smoketest_Mess.script					/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_mess.script
+../Scripts/Smoketest_Mess.script					/epoc32/release/winscw/urel/z/autosmoketest/smoketest_mess.script
+
+../TestData/Sms/Message1.txt					/epoc32/release/wins/udeb/z/autosmoketest/sms/message1.txt
+../TestData/Sms/Message1.txt					/epoc32/release/wins/urel/z/autosmoketest/sms/message1.txt
+../TestData/Sms/Message1.txt					/epoc32/release/winscw/udeb/z/autosmoketest/sms/message1.txt
+../TestData/Sms/Message1.txt					/epoc32/release/winscw/urel/z/autosmoketest/sms/message1.txt
+
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/wins/udeb/z/autosmoketest/smoketest_mess.ini
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/wins/urel/z/autosmoketest/smoketest_mess.ini
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/winscw/udeb/z/autosmoketest/smoketest_mess.ini
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/winscw/urel/z/autosmoketest/smoketest_mess.ini
+
+
+PRJ_TESTMMPFILES
+Smoketest_Mess.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMess.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,26 @@
+// 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:
+// This contains CTestMess which contains common constants
+// 
+//
+
+#if (!defined __TEST_MESS_H__)
+#define __TEST_MESS_H__
+
+/*@{*/
+// Literals defined for SMS account details
+_LIT(KSmsAccountName,	"Short Message");
+/*@}*/ 
+
+#endif /* __TEST_MESS_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,125 @@
+// 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"
+// which accompanies 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 contains CTestMessBase which is the base class for all 
+// messaging test steps
+// 
+//
+
+
+#if (!defined __TEST_MESS_BASE_H__)
+#define __TEST_MESS_BASE_H__
+
+
+#include <msvapi.h>
+#include <smuthdr.h>
+#include <test/testexecutestepbase.h>
+#include <emsformatie.h>
+#include <emssoundie.h>
+#include <emsanimationie.h>
+#include <iapprefs.h>
+
+#include "TestMessProcessor.h"
+#include "TestMessTimer.h"
+
+#include <smut.h>
+#include <smutset.h>
+#include <etelmm.h>
+#if (defined CDMA_API_ENABLED)
+#include <SmsMessageWrappers.h>
+#include <SmsMessageSettings.h>
+#endif
+#include <smuthdr.h>
+
+#include <test/teststepsmoketest.h>
+//To check whether the reply quoted is set
+_LIT(KReplyQuoted,		"SmsReplyQuoted");
+
+const TUid KUidMsvSMSHeaderStream				= {0x10001834};
+const TUid KUidMsgFileInternetAccessPreferences	= {0x1000924B};
+const TUid KUidMsvDefaultServices				= {0x100017FD};
+
+const TInt	KOneSecond = 1000000;
+
+class	CParaFormatLayer;
+class 	CCharFormatLayer;
+class 	CRichText;
+
+class CTestMessBase : public CTestStepSmokeTest, private MMsvSessionObserver
+	{
+public:
+	CTestMessBase(TBool aSetDirectory);
+	virtual ~CTestMessBase();
+
+	virtual TVerdict	doTestStepPreambleL();
+	virtual TVerdict	doTestStepPostambleL();
+
+	void							SetEntryL(TMsvId	aId);
+	CMsvEntry&						EntryL();
+	TBool							HasEntry() const { return iEntry!=NULL; }
+	const TMsvSelectionOrdering&	SelectionOrdering() const { return iOrder; }
+	CMsvSession&					Session() const { return *iSession; }
+	void							PrintEntryL(CMsvEntry& aEntry);
+	CEmsPreDefSoundIE*				NewPreDefSoundL(const TDesC& aPreDefType);
+
+
+protected:
+	//	MMsvSessionObserver
+	void			HandleSessionEventL(TMsvSessionEvent, TAny*, TAny*, TAny*);
+
+	//	Utilities
+	static HBufC8*	CopyToBuf8LC(const TDesC& aPtrC);
+	static HBufC*	CopyToBufLC(const TDesC8& aPtr8);
+	void			PrintTreeL(TMsvId aRoot);
+	void			IssueTimerRequest();
+
+
+	void			PrepareSmsHeaderFromIniFileL(CSmsHeader& aSmsHeader);
+
+	//reads the schedule time from ini file
+	TTimeIntervalMinutes	ReadScheduleTime();
+
+private:
+	//	PrintEntry helper functions
+	void			PrintStoreL(CMsvEntry& aEntry);
+	void			PrintStoreSmtpL(CMsvEntry& aEntry);
+	void			PrintStorePop3L(CMsvEntry& aEntry);
+	void			PrintStoreImap4L(CMsvEntry& aEntry);
+	void			PrintStoreSmsL(CMsvEntry& aEntry);
+
+	//	PrepareSmsHeaderFromIniFileL helper functions
+	void			SetAlignmentFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aAlignment);
+	void			SetFontSizeFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aFontSize);
+
+	CEmsPreDefAnimationIE*	NewPreDefAnimationL(const TDesC& aPreDefType);
+	CFbsBitmap*				NewBitmapL(const TParse& aFileName, const TDesC& aObjectSize);
+
+protected:
+	CMsvSession*				iSession;
+	CTestMessProcessor*			iMessageProcessor;
+	CParaFormatLayer*			iParaFormatLayer;
+ 	CCharFormatLayer*			iCharFormatLayer;
+ 	CRichText*					iBodyText;
+    TBool						iBodyAvailable;
+
+
+private:
+    TBool						iCheckForSim;
+	TBool						iSetDirectory;
+	CTestMessTimer*				iMessageTimer;
+	CActiveScheduler*			iSchedular;
+	CMsvEntry*					iEntry;
+	TMsvSelectionOrdering		iOrder;
+	};
+
+#endif /* __TEST_MESS_BASE_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessCleanMessageFolder.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+// 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"
+// which accompanies 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 contains CTestMessCleanMessageFolder which cleans out all the
+// message folders
+// 
+//
+
+#if (!defined __TEST_MESS_CLEAN_MESSAGE_FOLDER_H__)
+#define __TEST_MESS_CLEAN_MESSAGE_FOLDER_H__
+
+#include "TestMessBase.h"
+
+class CTestMessCleanMessageFolder : public CTestMessBase
+{
+public:
+	CTestMessCleanMessageFolder();
+
+	virtual	TVerdict	doTestStepL();
+
+private:
+	void	CleanFolders(const TMsvId aEntryId);
+
+private:
+	TInt	iNumberOfMessagesToDelete;
+};
+
+#endif /* __TEST_MESS_CLEAN_MESSAGE_FOLDER_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessCreateCdmaSmsUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,56 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 creates a Cdma sms header and service settings. It sets the fields by reading
+// from the ini file
+// 
+//
+ 
+
+#if (!defined __TEST_MESS_CREATE_CDMA_SMS_UTIL_H__)
+#define __TEST_MESS_CREATE_CDMA_SMS_UTIL_H__
+
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ This class creates a Cdma sms header and service settings.It sets the fields by reading
+ from the ini file
+*/
+class CTestMessCreateCdmaSmsUtil : public CTestMessCreateSmsUtilBase
+{
+public:
+	//Constructor
+	CTestMessCreateCdmaSmsUtil(CTestMessBase &aTestStep);
+
+	//Creates a new header
+	CSmsHeader* NewHeaderL(CRichText &aBodyText);
+
+	//Sets the fields of the header
+	void PrepareHeaderL(CSmsHeader &aSmsHeader);
+
+	//Sets the account settings.
+	void SetSmsAccountSettings(CSmsSettings &aSmsSettings);
+
+private:
+	//Gets the message type of the SMS
+	TSmsMessageType GetMessageTypeId(TPtrC aMessageType);
+	
+	//Gets the tele service ID
+	tia637::TTeleserviceId GetTeleServiceId(TPtrC aTeleService);
+
+	//Gets the message conversion ID
+	TSmsPIDConversion GetMessageConversionId(TPtrC aMessageConversion);
+	
+};
+
+#endif /* __TEST_MESS_CREATE_CDMA_SMS_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessCreateGsmSmsUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,56 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 creates the Gsm sms header and service settings. It fills up the
+// fields using data read from the ini file
+// 
+//
+
+
+#if (!defined __TEST_MESS_CREATE_GSM_SMS_UTIL_H__)
+#define __TEST_MESS_CREATE_GSM_SMS_UTIL_H__
+
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ This class creates the Gsm sms header and the GSM SMS service settings. 
+ The data is read from the ini file.
+*/
+class CTestMessCreateGsmSmsUtil : public CTestMessCreateSmsUtilBase
+	{
+public:
+	//Constructor
+	CTestMessCreateGsmSmsUtil(CTestMessBase &aTestStep);
+
+	/**
+	 Prepare sms account details
+	*/
+	virtual void		PrepareAccountL(CMsvSession& aSession);
+
+	/**
+	 Creates the new header object
+	*/
+	virtual CSmsHeader*	NewHeaderL(CRichText &aBodyText);
+
+	/**
+	 Fills up the fields of the sms header object
+	*/
+	virtual void 		PrepareHeaderL(CSmsHeader &aSmsHeader);
+
+	/**
+	 Fills up the fields of the sms account settings 
+	*/
+	virtual void 		SetSmsAccountSettings(CSmsSettings &aSmsSettings);
+	};
+
+#endif /* __TEST_MESS_CREATE_GSM_SMS_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessCreateSMS.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,64 @@
+// 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"
+// which accompanies 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 contains CTestMessCreateSMS. This class creates the sms message 
+// for GSM or CDMA. For CDMA mtm, it uses utility classes to create 
+// the respective GSM or CDMA sms message
+// 
+//
+
+#if (!defined __TEST_MESS_CREATE_SMS_H__)
+#define __TEST_MESS_CREATE_SMS_H__
+
+//Epoc include
+#include <test/smoketestactive.h>
+#include <sendas2.h>
+#include <csendasaccounts.h>
+#include <csendasmessagetypes.h>
+
+#include "TestMessBase.h"
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ This class creates the sms message for GSM or CDMA. For CDMA mtm, it 
+ uses utility classes to create the respective GSM or CDMA sms message
+*/
+class CTestMessCreateSMS : public CTestMessBase
+,	private MTestActiveCallback
+	{
+public:
+	CTestMessCreateSMS();
+
+	virtual	TVerdict	doTestStepPreambleL();
+	virtual	TVerdict	doTestStepL();
+
+protected:
+	virtual void		AddMtmCapabilitiesL(RSendAs& aSendAs);
+	virtual void		PrepareSendAsL(RSendAsMessage& aSendAs);
+	virtual void		PrepareHeaderL(CTestMessCreateSmsUtilBase& aCreateUtil, CSmsHeader& aSmsHeader);
+	void				ConCatMessageTextL(CSmsHeader& aHeader);
+	void				CreateSmsL(const TMsvId aMsvId, TTimeIntervalMinutes aScheduledTime);
+
+private:
+	virtual void	RunL() { CActiveScheduler::Stop(); }
+	/**
+	* Method from which CTestActive informs the user DoCancel call
+	*/
+	virtual void	DoCancel() { }
+
+private:
+	TBool							iSimInDatabase;
+	RMobilePhone::TMobileAddress	iSimPhoneNumber;
+	};
+
+#endif /* __TEST_MESS_CREATE_SMS_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessCreateSMSaccount.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,36 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessCreateSmsAccount.cpp
+// This contains CTestMessCreateSmsAccount which creates an SMS
+// account folder for GSM or CDMA
+// 
+//
+
+#if (!defined __TEST_MESS_CREATE_SMS_ACCOUNT_H__)
+#define __TEST_MESS_CREATE_SMS_ACCOUNT_H__
+
+#include "TestMessBase.h"
+
+/**
+ This class creates an SMS account folder for GSM or CDMA
+*/
+class CTestMessCreateSmsAccount : public CTestMessBase
+	{
+public:
+	CTestMessCreateSmsAccount();
+
+	virtual	TVerdict	doTestStepL();
+	};
+
+#endif /* __TEST_MESS_CREATE_SMS_ACCOUNT_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessCreateSmsUtilBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,81 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 is the base class for create CDMA or GSM SMS utility class
+// 
+//
+
+#if (!defined __TEST_MESS_CREATE_SMS_UTIL_BASE_H__)
+#define __TEST_MESS_CREATE_SMS_UTIL_BASE_H__
+
+#include "TestMessBase.h"
+
+// EPOC includes
+#include <mtmuids.h>
+#include <txtrich.h>
+
+#include <smut.h>
+
+/*@{*/
+_LIT(KBearer,				"bearer");
+_LIT(KEncoding,				"encoding");
+_LIT(KDef,					"default");
+_LIT(KDefBearer,			"smsbearer");
+_LIT(KDefEncoding,			"smsencoding");
+_LIT(KDefDeliveryReport,	"smsDeliveryReport");
+_LIT(KDeliveryReport,		"DeliveryReport");
+_LIT(KRejectDuplicate,		"SmsRejectDuplicate");
+_LIT(KReplyPath,			"SmsReplyPath");
+_LIT(KConCatenate,			"SmsConCatenate");
+
+_LIT(KBearerWap,			"wap");
+_LIT(KBearerWapSecure,		"wapsecure");
+/*@}*/
+
+/**
+ This class is the base class for create GSM or CDMA SMS utility classes
+*/
+class CTestMessCreateSmsUtilBase : public CBase
+	{
+public:
+	//Constructor
+	CTestMessCreateSmsUtilBase(CTestMessBase &aTestStep);
+
+	/**
+	 Prepare sms account details
+	*/
+	virtual void		PrepareAccountL(CMsvSession& aSession) = 0;
+
+	/**
+	 Creates the new header object
+	*/
+	virtual CSmsHeader*	NewHeaderL(CRichText &aBodyText) = 0;
+
+	/**
+	 Fills up the fields of the sms header object
+	*/
+	virtual void 		PrepareHeaderL(CSmsHeader &aSmsHeader) =0;
+
+	/**
+	 Fills up the fields of the sms account settings 
+	*/
+	virtual void 		SetSmsAccountSettings(CSmsSettings &aSmsSettings) =0;
+
+protected:
+	/**
+	 Reference to the test step which creates the utility class
+	*/
+	CTestMessBase&		iTestStep;
+	};
+
+#endif /* __TEST_MESS_CREATE_SMS_UTIL_BASE_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessEditEntry.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,64 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntry which edits the entry characterstics
+// 
+//
+
+
+#if (!defined __TEST_MESS_EDIT_ENTRY_H__)
+#define __TEST_MESS_EDIT_ENTRY_H__
+
+#include "TestMessProcessExistingMsg.h"
+
+/**
+ This class edits the entry characteristics
+*/
+class CTestMessEditEntry : public CTestMessProcessExistingMsg
+{
+public:
+	CTestMessEditEntry() { SetTestStepName(_L("EditEntry")); }
+
+	virtual	void ProcessMessageL(CBaseMtm& aBaseMtm, TMsvId aMsgId);
+
+	//Move the message to different folder
+	void MoveMessageL(TMsvId aMessageId,TMsvId aFolderId);
+
+	/**
+	 This class is used for asynchronous operation for move
+	 message operation
+	*/
+	class CMoveOperation: public CActive
+		{
+	public:
+		//Pure virtual implementation of CActive
+		void RunL();
+
+		//Pure virtual implementation of CActive
+		void DoCancel();
+		
+		//Set the operation as active
+		void SetOperation();
+
+		//Two phase construction
+		static CMoveOperation* NewL();
+	private:
+		//Second phase construction
+		void ConstructL();
+
+		//Constructor
+		CMoveOperation();
+		};
+};
+
+#endif /* __TEST_MESS_EDIT_ENTRY_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessEditEntryUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+// 
+//
+
+#if (!defined __TEST_MESS_EDIT_ENTRY_UTIL_H__)
+#define __TEST_MESS_EDIT_ENTRY_UTIL_H__
+
+#include "TestMessStoreProcessUtil.h"
+
+/**
+ This class is a utility to edit an entry
+*/
+class CTestMessEditEntryUtil : public CTestMessStoreProcessUtil
+{
+public:
+	CTestMessEditEntryUtil(CTestMessBase& aTestStep, TBool aSimChecked, TBool aSimInDatabase, RMobilePhone::TMobileAddress aSimPhoneNumber);
+
+protected:
+	// Process the CImHeader information
+	virtual void	ProcessImHeaderL(CImHeader& aHeader);
+
+	// Process the CImMimeHeader information
+	virtual void	ProcessImMimeHeaderL(CImMimeHeader& aHeader);
+
+	// Process the CImIAPPreferences information
+	virtual void	ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences);
+
+	// Process the CSmsHeader information
+	virtual void	ProcessSmsHeaderStreamL(CSmsHeader& aHeader);
+
+
+	// Process the CRichText information
+	virtual void	ProcessRichTextBodyL(CRichText& aBodyText);
+
+private:
+	TBool							iSimChecked;
+	TBool							iSimInDatabase;
+	RMobilePhone::TMobileAddress	iSimPhoneNumber;
+};
+
+#endif /* __TEST_MESS_EDIT_ENTRY_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessPrintEntryUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+/**
+* 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"
+* which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+* 
+*
+*/
+
+
+
+/**
+ @file TestMessPrintEntryUtil.h
+*/
+
+#if (!defined __TEST_MESS_PRINT_ENTRY_UTIL_H__)
+#define __TEST_MESS_PRINT_ENTRY_UTIL_H__
+
+#include "TestMessStoreProcessUtil.h"
+
+class CTestMessPrintEntryUtil : public CTestMessStoreProcessUtil
+{
+public:
+	CTestMessPrintEntryUtil(CTestMessBase& aTestStep);
+
+protected:
+	// Process the CImHeader information
+	virtual void	ProcessImHeaderL(CImHeader& aHeader);
+
+	// Process the CImMimeHeader information
+	virtual void	ProcessImMimeHeaderL(CImMimeHeader& aHeader);
+
+	// Process the CImIAPPreferences information
+	virtual void	ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences);
+
+	// Process the CSmsHeader information
+	virtual void	ProcessSmsHeaderStreamL(CSmsHeader& aHeader);
+
+
+	// Process the CRichText information
+	virtual void	ProcessRichTextBodyL(CRichText& aBodyText);
+};
+
+#endif /* __TEST_MESS_PRINT_ENTRY_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessProcessExistingMsg.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,43 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessProcessExistingMsg.cpp
+// This contains CTestMessProcessExistingMsg
+// Base class for processing an existing message
+// 
+//
+
+#if (!defined __TEST_MESS_PROCESS_EXISTING_MSG__)
+#define __TEST_MESS_PROCESS_EXISTING_MSG__
+
+#include "TestMessBase.h"
+
+#include <mtclbase.h>
+
+class CTestMessProcessExistingMsg : public CTestMessBase
+{
+public:
+	CTestMessProcessExistingMsg();
+
+	virtual	TVerdict		doTestStepL();
+
+protected:
+	virtual	void			ProcessMessageL(CBaseMtm& aBaseMtm, TMsvId aMsgId) = 0;
+	virtual	void			PostProcessMessageL();
+	TUid					MtmID() const { return iMtmID; }
+
+private:
+	TUid			iMtmID;
+};
+
+#endif /* __TEST_MESS_PROCESS_EXISTING_MSG__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessProcessor.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,86 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessProcessor.cpp
+// This contains CTestMessProcessor which an active object utility
+// used for send/recieving or any time consuming 
+// 
+//
+
+#if (!defined __TEST_MESS_PROCESSOR_H__)
+#define __TEST_MESS_PROCESSOR_H__
+
+//Epoc Include
+#include <e32base.h>
+#include <msvapi.h>
+#include <miuthdr.h>
+
+class CTestStep;
+
+class MTestMessProcessorClient
+	{
+public:
+	virtual TBool			MoreOperations() const = 0;
+	virtual CMsvOperation*	CreateOperationL(TRequestStatus& aStatus) = 0;
+	virtual TInt			DisplayProgressL(TBool aFinalProgress, CMsvOperation* aMsvOperation) = 0;
+	};
+
+/**
+ This class is an active object utility used for send/recieving
+ or any time consuming
+*/
+class CTestMessProcessor : public CActive
+	{
+public:
+	virtual ~CTestMessProcessor();
+	static CTestMessProcessor*	NewL(CTestStep& aTestStep, CMsvSession& aSession);
+
+	void	RunL();
+
+	void	DisplayProgress();
+	void	SendEmailMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient);
+
+	//Sends the SMS message
+	void	SendSmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient, TBool aCancelSms);
+	void	SendMmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient);
+	void	MtmRequestL(TMsvId aAccountId, MTestMessProcessorClient* aClient);
+
+protected:
+	CTestMessProcessor(CTestStep& aTestStep, CMsvSession& aSession /*, MTestInstrumentation& aInstrumentation */);
+	void	ConstructL();
+	void	DoCancel();
+
+private:
+	enum EState
+		{
+		EStatePrepareToSendMsg,
+		EStateRequest,
+		};
+
+	EState						iState;
+	CTestStep&					iTestStep;
+	CMsvSession&				iSession;
+
+	//	Send message parameters saved for RunL
+	CMsvEntry*					iEntry;
+	TMsvId						iMsgId;
+	MTestMessProcessorClient*	iClient;
+	TMsvEntry					iMsgEntry;
+	CMsvOperation*				iMsvOperation;
+	/**
+	 Boolean value for the Cancel sms flag
+	*/
+	TBool						iCancelSms;
+};
+
+#endif /* __TEST_MESS_PROCESSOR_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,45 @@
+// 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"
+// which accompanies 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 contains CTestMessServer
+// 
+//
+
+#if (!defined __TEST_MESS_SERVER_H_)
+#define __TEST_MESS_SERVER_H_
+
+#include "TestMessWatcher.h"
+#include "TestMessSharedData.h"
+
+#include <test/testexecuteserverbase.h>
+
+class CMsvSession;
+
+class  CTestMessServer : public CTestServer
+{
+public:
+	static CTestMessServer*	NewL();
+	virtual CTestStep*		CreateTestStep(const TDesC& aStepName);
+	~CTestMessServer();
+	CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+protected:
+	CTestMessServer();
+	void	ConstructL(const TDesC& aName);
+
+private:
+
+private:
+	CTestMessSharedData*	iSharedData;
+};
+
+#endif /* __TEST_MESS_SERVER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessSession.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,35 @@
+// 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"
+// which accompanies 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 contains CTestMessSession
+// 
+//
+
+#if (!defined __TEST_MESS_SESSION_H__)
+#define __TEST_MESS_SESSION_H__
+
+#include <test/testexecuteserverutils.h>
+#include "TestMessSharedData.h"
+
+class CTestMessSession : public CTestSession
+{
+public:
+	CTestMessSession(CTestMessSharedData* aSharedData);
+	virtual void ServiceL(const RMessage2& aMessage);
+
+
+private:
+	CTestMessSharedData*	iSharedData;
+};
+
+#endif /* __TEST_MESS_SESSION_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessSetDefaultSc.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessSetDefaultSc.cpp
+// This contains TestMessSetDefaultSc which sets an SMS
+// SC as default SC.
+// 
+//
+
+#if (!defined __TEST_MESS_SET_DEFAULT_SC_H__)
+#define __TEST_MESS_SET_DEFAULT_SC_H__
+
+#include "TestMessBase.h"
+
+class CTestMessSetDefaultSc : public CTestMessBase
+{
+public:
+	CTestMessSetDefaultSc();
+
+	virtual	TVerdict	doTestStepL();
+};
+
+#endif /* __TEST_MESS_SET_DEFAULT_SC_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessSharedData.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,102 @@
+// 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"
+// which accompanies 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 contains CTestMessSharedData
+// 
+//
+
+#if (!defined __TEST_MESS_SHARED_DATA_H__)
+#define __TEST_MESS_SHARED_DATA_H__
+
+#include <msvapi.h>
+#include <mtclreg.h>
+#include <imapconnectionobserver.h>
+#include <test/testexecutestepbase.h>
+
+class  CTestMessSharedData : public CBase, private MMsvSessionObserver
+{
+public:
+	static CTestMessSharedData*	NewL();
+	~CTestMessSharedData();
+
+	void	IMAP4ConnectAndSyncCompleteAfterDisconnectL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep);
+	TInt	DeleteEntryL(CTestStep& aStep);
+
+	void	DoProcessL();
+
+protected:
+	CTestMessSharedData();
+
+private:
+	void	ConstructL();
+
+	//	MMsvSessionObserver implementation
+	virtual void HandleSessionEventL(TMsvSessionEvent, TAny*, TAny*, TAny*) {}
+
+private:
+	class CMsgEntry : public CActive
+	{
+	public:
+		~CMsgEntry();
+
+		virtual void	DoCancel();
+		virtual void	RunL();
+		virtual void	DoProcessL(CClientMtmRegistry& aMtmRegistry) = 0;
+		virtual void	DoCancelProcessL() = 0;
+
+	protected:
+		CMsgEntry(CMsgEntry* aList);
+
+		void	ConstructL(CTestStep& aStep);
+
+	public:
+		TName		iName;
+		CMsgEntry*	iNext;
+		TBool		iReadyToBeDeleted;
+	};
+	class CMsgIMAP4ConnectAndSyncComplete : public CMsgEntry, public MMsvImapConnectionObserver
+	{
+	public:
+		static CMsgIMAP4ConnectAndSyncComplete* NewL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep, CMsgEntry* aList);
+		~CMsgIMAP4ConnectAndSyncComplete();
+
+		virtual void	RunL();
+		virtual void	DoProcessL(CClientMtmRegistry& aMtmRegistry);
+		virtual void	DoCancelProcessL();
+
+	protected:
+		CMsgIMAP4ConnectAndSyncComplete(TUid aMtmId, TMsvId aMsvId, CMsgEntry* aList);
+
+	private:		
+		//	MMsvImapConnectionObserver implementation
+		void	HandleImapConnectionEvent(TImapConnectionEvent aConnectionEvent);
+
+	private:
+		TUid			iMtmId;
+		TMsvId			iMsvId;
+		CBaseMtm*		iBaseMtm;
+		CMsvOperation*	iOperation;
+		
+	};
+
+public:
+	CMsvSession*		iSession;
+	CClientMtmRegistry*	iMtmRegistry;
+	CMsgEntry*			iList;
+
+private:
+	CMsgEntry*			iAnyPostStepToDo;
+	TBool				iDeleteTestStep;
+};
+
+#endif /* __TEST_MESS_SHARED_DATA_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessStoreProcessUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,81 @@
+/**
+* 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"
+* which accompanies 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 contains CTestMessStoreProcessUtil. Base class process what is in the message store
+* 
+*
+*/
+
+
+
+/**
+ @file TestMessStoreProcessUtil.h
+*/
+
+#if (!defined __TEST_MESS_STORE_PROCESS_UTIL_H__)
+#define __TEST_MESS_STORE_PROCESS_UTIL_H__
+
+#include "TestMessBase.h"
+
+class CTestMessStoreProcessUtil : public CBase
+{
+public:
+	CTestMessStoreProcessUtil(CTestMessBase& aTestStep, TBool aReadOnly);
+
+	//
+	TInt	ProcessEntryL(TMsvId aMsvId);
+
+protected:
+	// Process the CImHeader information
+	virtual void	ProcessImHeaderL(CImHeader& aHeader) = 0;
+
+	// Process the CImMimeHeader information
+	virtual void	ProcessImMimeHeaderL(CImMimeHeader& aHeader) = 0;
+
+	// Process the CImIAPPreferences information
+	virtual void	ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences) = 0;
+
+	// Process the CSmsHeader information
+	virtual void	ProcessSmsHeaderStreamL(CSmsHeader& aHeader) = 0;
+
+
+	// Process the CRichText information
+	virtual void	ProcessRichTextBodyL(CRichText& aBodyText) = 0;
+
+	// Convert Text to character set information
+	TBool			ValidCharacterSetInfo(const TPtrC& aCharacterSetType, TUint &aCharSetVal);
+
+private:
+	// Process the CImHeader information
+	void	ProcessImHeaderL(CMsvStore& aStore);
+
+	// Process the CImMimeHeader information
+	void	ProcessImMimeHeaderL(CMsvStore& aStore);
+
+
+	// Process the CSmsHeader information
+	void	ProcessSmsHeaderStreamL(CMsvStore& aStore);
+
+
+	// Process the CRichText information
+	void	ProcessRichTextBodyL(CMsvStore& aStore);
+
+protected:
+	CTestMessBase&	iTestStep;
+
+private:
+	TBool			iReadOnly;
+};
+
+#endif /* __TEST_MESS_STORE_PROCESS_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessTimer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,44 @@
+// 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"
+// which accompanies 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 contains CTestMessTimer
+// 
+//
+
+#if (!defined __TEST_MESS_TIMER_H_)
+#define __TEST_MESS_TIMER_H_
+
+#include <e32base.h>
+
+class CTestMessProcessor;
+
+class CTestMessTimer : public CTimer  
+{
+public:
+	virtual ~CTestMessTimer();
+	static CTestMessTimer*	NewL(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor);
+
+	void	RunL();
+
+	void	IssueRequest();
+
+protected:
+	CTestMessTimer(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor);
+	void	ConstructL();
+
+private:
+	TTimeIntervalMicroSeconds32	iInterval;
+	CTestMessProcessor&			iProcessor;
+};
+
+#endif /* __TEST_MESS_TIMER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Inc/TestMessWatcher.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,45 @@
+// 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"
+// which accompanies 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 contains CTestMessWatcher which starts the message watchers
+// 
+//
+
+#if (!defined __TEST_MESS_WATCHER_H__)
+#define __TEST_MESS_WATCHER_H__
+
+#include <e32base.h>
+#include <watcher.h>
+
+const TInt	KTestUtilsWatcherStarterMin = 5000000;
+
+class CTestMessWatcher : public CActive
+{
+public:
+	static CTestMessWatcher* NewL(TInt aPriority = EPriorityStandard);
+	~CTestMessWatcher();
+
+private:
+	CTestMessWatcher(TInt aPriority);
+	void	RunL();
+	void	DoCancel();
+	void	ConstructL();
+
+private:
+	RTimer						iTimer;
+	RProcess					iWatcher;
+	TBool						iConstructed;
+	TTimeIntervalMicroSeconds32	iTimeLeft;
+};
+
+#endif /* __TEST_MESS_WATCHER_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Scripts/Smoketest_CreateSmsAccount.script	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,20 @@
+//
+// 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 Create SMS account with vodaphone service centre
+//
+LOAD_SUITE Smoketest_Mess_Server
+RUN_TEST_STEP	10000	Smoketest_Mess_Server CreateSmsAccount		c:\smoketest\smoketest_mess.ini	27029_SmsVodafoneAccount
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Scripts/Smoketest_Mess.script	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,42 @@
+//
+// 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 Run Mesaging smoketest
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\mcentre.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Mess_Server
+// Wait for watchers to start
+DELAY 1000
+//
+RUN_UTILS MkDir c:\autosmoketest\
+RUN_UTILS MkDir c:\autosmoketest\sms\
+RUN_UTILS CopyFile z:\autosmoketest\smoketest_mess.ini	c:\autosmoketest\smoketest_mess.ini
+RUN_UTILS MakeReadWrite c:\autosmoketest\smoketest_mess.ini
+RUN_UTILS CopyFile z:\autosmoketest\sms\message1.txt	c:\autosmoketest\sms\message1.txt
+RUN_UTILS MakeReadWrite c:\autosmoketest\sms\message1.txt
+//
+RUN_TEST_STEP	10000	Smoketest_Mess_Server CleanMessageFolder		c:\autosmoketest\Smoketest_mess.ini	27595_SmsCount01
+DELAY 500
+PRINT Create SMS account with vodaphone service centre
+//
+RUN_TEST_STEP	10000	Smoketest_Mess_Server CreateSmsAccount		c:\autosmoketest\smoketest_mess.ini	27029_SmsVodafoneAccount
+//
+RUN_TEST_STEP	10000	Smoketest_Mess_Server SetSmsSc				c:\autosmoketest\Smoketest_mess.ini	27029_SmsVodafoneAccount
+DELAY 500
+RUN_TEST_STEP	10000	Smoketest_Mess_Server CreateSms				c:\autosmoketest\Smoketest_mess.ini	27584_SmsMessage01
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1517 @@
+// 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"
+// which accompanies 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 contains CTestCase which is the base class for all the TestCase DLLs
+// 
+//
+
+#include "TestMessBase.h"
+#include "TestMessProcessor.h"
+#include "TestMessTimer.h"
+#include "TestMessPrintEntryUtil.h"
+
+// EPOC includes
+#include <smtpset.h>
+#include <pop3set.h>
+#include <imapset.h>
+#include <txtrich.h>
+#include <f32file.h>
+#include <msvids.h>
+#include <fbs.h>
+#include <emsuserpromptie.h>
+#ifdef __MESSAGING_API_V2__
+#include <smut.h>
+#include <miutset.h>
+#include <cemailaccounts.h>
+#include <csmsaccount.h>
+#endif
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+_LIT(KDepth,					"depth");
+_LIT(KFolder,					"folder%d");
+
+// Default value for depth of the count
+#define KDefaultDepthCount		1
+
+// Default value for depth of the count
+#define KDefaultDepthCount		1
+
+_LIT(KDefault,					"default");
+
+_LIT(KScheduled,				"scheduled");
+_LIT(KProgress,					"progress");
+
+//_LIT(KIap,						"iap");
+//_LIT(KIapName,					"iapname");
+
+_LIT(KElements,					"elements");
+_LIT(KStartPosition,			"StartPosition%d");
+_LIT(KFile,						"File%d");
+_LIT(KType,						"Type%d");
+_LIT(KTypeFormat,				"Format");
+_LIT(KTypeSound,				"Sound");
+_LIT(KTypePreDefSound,			"PreDefSound");
+_LIT(KTypeAnimation,			"Animation");
+_LIT(KTypePreDefAnimation,		"PreDefAnimation");
+_LIT(KTypePicture,				"Picture");
+_LIT(KTypeUserPrompt,			"UserPrompt");
+_LIT(KFormatLength,				"FormatLength%d");
+_LIT(KBold,						"Bold%d");
+_LIT(KItalic,					"Italic%d");
+_LIT(KUnderline,				"Underline%d");
+_LIT(KStrikethrough,			"Strikethrough%d");
+_LIT(KAlignment,				"Alignment%d");
+_LIT(KFontSize,					"FontSize%d");
+
+_LIT(KLeftAlign,				"LeftAlign");
+_LIT(KRightAlign,				"RightAlign");
+_LIT(KCenterAlign,				"CenterAlign");
+_LIT(KLangDepend,				"LangDepend");
+
+_LIT(KNormal,					"Normal");
+_LIT(KLarge,					"Large");
+_LIT(KSmall,					"Small");
+_LIT(KVariable,					"Variable");
+_LIT(KReserved,					"Reserved");
+
+_LIT(KEmsPreDef,				"emspredef%d");
+
+_LIT(KEmsAnimTypeFlirty,		"a0");
+_LIT(KEmsAnimTypeGlad,			"a1");
+_LIT(KEmsAnimTypeSceptic,		"a2");
+_LIT(KEmsAnimTypeSad,			"a3");
+_LIT(KEmsAnimTypeWow,			"a4");
+_LIT(KEmsAnimTypeCrying,		"a5");
+_LIT(KEmsAnimTypeWinking,		"a6");
+_LIT(KEmsAnimTypeLaughing,		"a7");
+_LIT(KEmsAnimTypeIndifferent,	"a8");
+_LIT(KEmsAnimTypeKissing,		"a9");
+_LIT(KEmsAnimTypeConfused,		"a10");
+_LIT(KEmsAnimTypeTongueOut,		"a11");
+_LIT(KEmsAnimTypeAngry,			"a12");
+_LIT(KEmsAnimTypeGlasses,		"a13");
+_LIT(KEmsAnimTypeDevil,			"a14");
+
+_LIT(KEmsSoundTypeChimesHigh,	"s0");
+_LIT(KEmsSoundTypeChimesLow,	"s1");
+_LIT(KEmsSoundTypeDing,			"s2");
+_LIT(KEmsSoundTypeTaDa,			"s3");
+_LIT(KEmsSoundTypeNotify,		"s4");
+_LIT(KEmsSoundTypeDrum,			"s5");
+_LIT(KEmsSoundTypeClaps,		"s6");
+_LIT(KEmsSoundTypeFanFar,		"s7");
+_LIT(KEmsSoundTypeChordHigh,	"s8");
+_LIT(KEmsSoundTypeChordLow,		"s9");
+
+/*
+_LIT(KBioIAP,					"IAP");
+_LIT(KBioEmailNotification,		"EmailNotification");
+_LIT(KBioBusinessCard,			"BusinessCard");
+_LIT(KBioWAPAccessPoint,		"WAPAccessPoint");
+_LIT(KBioVCalendar,				"VCalendar");
+_LIT(KBioVCard,					"VCard");
+_LIT(KBioRingingTones,			"RingingTones");
+_LIT(KBioOperatorLogo,			"OperatorLogo");
+_LIT(KBioWPRV,					"WPRV");
+_LIT(KBioCLILogo,				"CLILogo");
+*/
+_LIT(KObjectSize,				"ObjectSize%d");
+_LIT(KBody,						"body");
+/*@}*/
+
+const TInt KSmallObject		= 0;
+const TInt KLargeObject		= 1;
+const TInt KVariableObject	= 2;
+
+const TInt KDefaultStartPos	= 1;
+
+/**
+ * Constructor.
+ * @return - None
+ * 
+*/	
+CTestMessBase::CTestMessBase(TBool aSetDirectory)
+:	CTestStepSmokeTest()
+,	iSession(NULL)
+,	iMessageProcessor(NULL)
+,   iParaFormatLayer(NULL)
+,   iCharFormatLayer(NULL)
+,   iBodyText(NULL)
+,	iBodyAvailable(EFalse)
+,	iSetDirectory(aSetDirectory)
+,	iMessageTimer(NULL)
+,	iSchedular(NULL)
+,	iEntry(NULL)
+,	iOrder(KMsvGroupByType|KMsvGroupByStandardFolders, EMsvSortById, ETrue)
+	{
+	}
+
+CTestMessBase::~CTestMessBase()
+	{
+	delete iEntry;
+	iEntry=NULL;
+	delete iMessageTimer;
+	iMessageTimer=NULL;
+	delete iMessageProcessor;
+	iMessageProcessor=NULL;
+	delete iSession;
+	iSession=NULL;
+	delete iSchedular;
+	iSchedular=NULL;
+	delete iBodyText;
+	iBodyText=NULL;
+	delete iCharFormatLayer;
+	iCharFormatLayer=NULL;
+	delete iParaFormatLayer;
+	iParaFormatLayer=NULL;
+	}
+
+enum TVerdict CTestMessBase::doTestStepPreambleL()
+	{
+	TVerdict	ret=CTestStepSmokeTest::doTestStepPreambleL();
+
+	// Printing to the console and log file
+	const TDesC&	stepName=TestStepName();
+	INFO_PRINTF2(_L("%S"), &stepName);
+
+	iSchedular=new (ELeave) CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+	iSession=CMsvSession::OpenSyncL(*this);
+
+	//	Get progress
+	TInt	progress=0;
+	TBool	hasProgress=GetIntFromConfig(ConfigSection(), KProgress, progress);
+	if ( !hasProgress )
+		{
+		hasProgress=GetIntFromConfig(KDefault, KProgress, progress);
+		}
+
+	iMessageProcessor=CTestMessProcessor::NewL(*this, *iSession);
+	if ( hasProgress )
+		{
+		iMessageTimer=CTestMessTimer::NewL(progress*KOneSecond, *iMessageProcessor);
+		}
+
+	if ( iSetDirectory )
+		{
+		TInt	depth=KDefaultDepthCount;
+		TBool	returnValue=GetIntFromConfig(ConfigSection(), KDepth, depth);
+		if ( !returnValue )
+			{
+			depth=KDefaultDepthCount;
+			}
+		INFO_PRINTF2(_L("Depth = %d"), depth);
+
+		//	Searce for the entry
+		TRAPD(error,SetEntryL(KMsvRootIndexEntryId));
+		if( error != KErrNone)
+			{
+			INFO_PRINTF2(_L("Set Entry failed, Error %D"),error);
+			SetTestStepError(error);
+			ret=EFail;
+			}
+		else
+			{
+
+			TBuf<KMaxTestExecuteCommandLength>	tempStore;
+			TBool								found=ETrue;
+			for (TInt entry=0; entry<depth && found;)
+				{
+				TPtrC	subject;
+				tempStore.Format(KFolder(), ++entry);
+				returnValue =GetStringFromConfig(ConfigSection(), tempStore, subject);
+				if ( !returnValue )
+					{
+					INFO_PRINTF1(_L("Null Folder"));
+					}
+				INFO_PRINTF2(_L("Folder = %S"), &subject);
+
+				CMsvEntrySelection*	selection=EntryL().ChildrenL();
+				CleanupStack::PushL(selection);
+				TInt				count=selection->Count();
+		
+				found=EFalse;
+				for (TInt i=count; i>0 && !found; )
+					{
+					TMsvId	childId=selection->At(--i);
+
+					SetEntryL(childId);
+					INFO_PRINTF2(_L("Entry Detail : %S"), &(EntryL().Entry().iDetails));
+					INFO_PRINTF2(_L("Entry Description: %S"), &(EntryL().Entry().iDescription));
+					if ( subject.Compare(EntryL().Entry().iDetails) == 0 ||
+						 subject.Compare(EntryL().Entry().iDescription) == 0 )
+						{
+						found=ETrue;
+						}
+					}
+				CleanupStack::PopAndDestroy(selection);
+				}
+
+			if ( !found )
+				{
+				ERR_PRINTF1(_L("Folder not found"));
+				ret=EFail;
+				}
+			}
+		}
+	if (TestStepResult() == EPass)
+		{
+		//Get body(file path) from ini file and read respective file. Store it into CRichText format.
+		iParaFormatLayer=CParaFormatLayer::NewL();
+		iCharFormatLayer=CCharFormatLayer::NewL(); 
+		iBodyText=CRichText::NewL(iParaFormatLayer, iCharFormatLayer);
+		iBodyAvailable=EFalse;
+	
+		TPtrC	body;
+		if(GetStringFromConfig(ConfigSection(), KBody, body))
+			{
+			INFO_PRINTF2(_L("Body = %S"), &body);
+			iBodyAvailable=ETrue;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("No Body"));
+			}
+
+		if ( iBodyAvailable )
+			{
+			// open the file
+			RFile	file;
+	
+			TInt anError = file.Open(iSession->FileSession(), body, EFileShareAny);
+			if(anError == KErrNone)
+				{
+				TBool		reading=ETrue;
+				TInt		pos=0;
+				TBuf8<1>	charIn;
+				while (reading)
+					{
+					file.Read(charIn, 1);
+					if(charIn.Length())
+						{
+						switch ( charIn[0] )
+							{
+						case '\r':
+							iBodyText->InsertL(pos++, CEditableText::ELineBreak);
+						case '\n':
+							break;
+						default:
+							iBodyText->InsertL(pos++, TChar(charIn[0]));
+							}
+						}
+					else
+						{
+						reading = EFalse;	// stop at the end of the file
+						}
+					}
+				iBodyAvailable=ETrue;
+				file.Close();
+				}
+			else
+			{
+			INFO_PRINTF2(_L("Cannot open file = %S"), &body);
+			iBodyAvailable=EFalse;
+			}
+		}//End of read file.
+	}
+
+	SetTestStepResult(ret);
+	return ret;
+	}
+
+enum TVerdict CTestMessBase::doTestStepPostambleL()
+	{
+	delete iEntry;
+	iEntry=NULL;
+	delete iMessageTimer;
+	iMessageTimer=NULL;
+	delete iMessageProcessor;
+	iMessageProcessor=NULL;
+	delete iSession;
+	iSession=NULL;
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+	return CTestStepSmokeTest::doTestStepPostambleL();
+	}
+
+void CTestMessBase::SetEntryL(TMsvId aId)
+	{
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession->GetEntryL(aId);
+	}
+
+CMsvEntry& CTestMessBase::EntryL()
+	{
+	if ( iEntry == NULL )
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	return *iEntry;
+	}
+
+
+HBufC8* CTestMessBase::CopyToBuf8LC(const TDesC& aDesC)
+//
+// @return - HBufC8*
+// Converts TDesC to HBufC8*.
+//
+	{
+	HBufC8*	itemBuff8 = HBufC8::NewLC(aDesC.Length());
+	itemBuff8->Des().Copy(aDesC);
+
+	return itemBuff8;
+	}
+
+HBufC* CTestMessBase::CopyToBufLC(const TDesC8& aDesC)
+//
+// @return - HBufC8*
+// Converts TDesC to HBufC8*.
+//
+	{
+	HBufC*	itemBuff = HBufC::NewLC(aDesC.Length());
+	itemBuff->Des().Copy(aDesC);
+
+	return itemBuff;
+	}
+
+
+#ifndef __MESSAGING_API_V2__
+void CTestMessBase::SetDefaultServiceL(TUid aMtm, TMsvId aService) const
+	{
+	// --- Now restore the default services from the root store ---
+	CMsvEntry*				rootEntry=iSession->GetEntryL(KMsvRootIndexEntryIdValue);
+	CleanupStack::PushL(rootEntry);
+	CMsvStore*				store = rootEntry->EditStoreL();
+	CleanupStack::PushL(store);
+	CMsvDefaultServices*	services = new(ELeave)CMsvDefaultServices;
+	CleanupStack::PushL(services);
+	services->RestoreL(*store);
+
+	// --- And now re-set the default service for the MTM to the one given ---
+	TMsvDefaultService	defaultService;
+	defaultService.iMtm=aMtm;
+	defaultService.iService=aService;
+	services->ChangeDefaultServiceL(defaultService);
+	services->StoreL(*store);
+	store->CommitL();
+	CleanupStack::PopAndDestroy(3, rootEntry);
+	}
+
+TInt CTestMessBase::DefaultServiceL(TUid aMtm, TMsvId& aService) const
+	{
+	// --- Now restore the default services from the root store ---
+	CMsvEntry*				rootEntry=iSession->GetEntryL(KMsvRootIndexEntryIdValue);
+	CleanupStack::PushL(rootEntry);
+	CMsvStore*				store=rootEntry->ReadStoreL();
+	CleanupStack::PushL(store);
+	CMsvDefaultServices*	services=new(ELeave)CMsvDefaultServices;
+	CleanupStack::PushL(services);
+	services->RestoreL(*store);
+
+	TInt					ret=services->DefaultService(aMtm, aService);
+
+	CleanupStack::PopAndDestroy(3, rootEntry);
+
+	return ret;
+	}
+#endif
+
+void CTestMessBase::PrintTreeL(TMsvId aRoot)
+	{
+	INFO_PRINTF1(_L("PrintTreeL In"));
+	CMsvEntry*			entry=iSession->GetEntryL(aRoot);
+	CleanupStack::PushL(entry);
+	entry->SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=entry->ChildrenL();
+	CleanupStack::PushL(selection);
+
+	PrintEntryL(*entry);
+	for (TInt i=0; i<selection->Count(); )
+		{
+		PrintTreeL(selection->At(i++));
+		}
+
+	CleanupStack::PopAndDestroy(2, entry);
+	INFO_PRINTF1(_L("PrintTreeL Out"));
+	}
+
+void CTestMessBase::PrintEntryL(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+
+	INFO_PRINTF2(_L("Entry Detail : %S"), &(entry.iDetails));
+	INFO_PRINTF2(_L("  Description: %S"), &(entry.iDescription));
+	INFO_PRINTF2(_L("  Id         : %x"), entry.Id());
+	INFO_PRINTF2(_L("  Parent Id  : %x"), entry.Parent());
+	INFO_PRINTF2(_L("  Service Id : %x"), entry.iServiceId);
+	if ( entry.iRelatedId != 0 )
+		{
+		INFO_PRINTF2(_L("  Related Id : %x"), entry.iRelatedId);
+		}
+	INFO_PRINTF2(_L("  Type       : %x"), entry.iType);
+	INFO_PRINTF2(_L("  Mtm        : %x"), entry.iMtm);
+
+
+	if ( entry.iSize != 0 )
+		{
+		INFO_PRINTF2(_L("  Size       : %x"), entry.iSize);
+		}
+	if ( entry.iError != 0 )
+		{
+		INFO_PRINTF2(_L("  Error      : %d"), entry.iError);
+		}
+	if ( entry.iBioType != 0 )
+		{
+		INFO_PRINTF2(_L("  BioType    : %x"), entry.iBioType);
+		}
+	if ( entry.MtmData1() != 0 )
+		{
+		INFO_PRINTF2(_L("  MtmData1   : %x"), entry.MtmData1());
+		}
+	if ( entry.MtmData2() != 0 )
+		{
+		INFO_PRINTF2(_L("  MtmData2   : %x"), entry.MtmData2());
+		}
+	if ( entry.MtmData3() != 0 )
+		{
+		INFO_PRINTF2(_L("  MtmData3   : %x"), entry.MtmData3());
+		}
+	if ( entry.Attachment() != 0 )
+		{
+		INFO_PRINTF2(_L("  Attachment : %x"), entry.Attachment());
+		}
+	if ( entry.Complete() != 0 )
+		{
+		INFO_PRINTF2(_L("  Complete   : %x"), entry.Complete());
+		}
+	if ( entry.Connected() != 0 )
+		{
+		INFO_PRINTF2(_L("  Connected  : %x"), entry.Connected());
+		}
+	if ( entry.Deleted() != 0 )
+		{
+		INFO_PRINTF2(_L("  Deleted    : %x"), entry.Deleted());
+		}
+	if ( entry.Failed() != 0 )
+		{
+		INFO_PRINTF2(_L("  Failed     : %x"), entry.Failed());
+		}
+	if ( entry.InPreparation() != 0 )
+		{
+		INFO_PRINTF2(_L("  InPrep     : %x"), entry.InPreparation());
+		}
+	if ( entry.MultipleRecipients() != 0 )
+		{
+		INFO_PRINTF2(_L("  MultiRecip : %x"), entry.MultipleRecipients());
+		}
+	if ( entry.OffPeak() != 0 )
+		{
+		INFO_PRINTF2(_L("  OffPeak    : %x"), entry.OffPeak());
+		}
+	if ( entry.Operation() != 0 )
+		{
+		INFO_PRINTF2(_L("  Operation  : %x"), entry.Operation());
+		}
+	if ( entry.Owner() != 0 )
+		{
+		INFO_PRINTF2(_L("  Owner      : %x"), entry.Owner());
+		}
+	if ( entry.PcSyncCount() != 0 )
+		{
+		INFO_PRINTF2(_L("  PcSyncCount: %x"), entry.PcSyncCount());
+		}
+	if ( entry.Priority() != 0 )
+		{
+		INFO_PRINTF2(_L("  Priority   : %x"), entry.Priority());
+		}
+	if ( entry.ReadOnly() != 0 )
+		{
+		INFO_PRINTF2(_L("  ReadOnly   : %x"), entry.ReadOnly());
+		}
+	if ( entry.Scheduled() != 0 )
+		{
+		INFO_PRINTF2(_L("  Scheduled  : %x"), entry.Scheduled());
+		}
+	if ( entry.SendingState() != 0 )
+		{
+		INFO_PRINTF2(_L("  Send State : %x"), entry.SendingState());
+		}
+	if ( entry.StandardFolder() != 0 )
+		{
+		INFO_PRINTF2(_L("  StdFolder  : %x"), entry.StandardFolder());
+		}
+	if ( entry.Unread() != 0 )
+		{
+		INFO_PRINTF2(_L("  Unread     : %x"), entry.Unread());
+		}
+	if ( entry.Visible() != 0 )
+		{
+		INFO_PRINTF2(_L("  Visible    : %x"), entry.Visible());
+		}
+
+#if (!defined CDMA_API_ENABLED)
+	if ( aEntry.HasStoreL() )
+		{
+		PrintStoreL(aEntry);
+		}
+#endif
+	}
+
+void CTestMessBase::PrintStoreL(CMsvEntry& aEntry)
+	{
+	TMsvEntry					entry=aEntry.Entry();
+	CTestMessPrintEntryUtil*	printUtil=new (ELeave) CTestMessPrintEntryUtil(*this);
+	CleanupStack::PushL(printUtil);
+
+	printUtil->ProcessEntryL(entry.Id());
+	CleanupStack::PopAndDestroy(printUtil);
+
+	if ( entry.iMtm==KUidMsgTypeSMTP )
+		{
+		PrintStoreSmtpL(aEntry);
+		}
+	else if ( entry.iMtm == KUidMsgTypePOP3 )
+		{
+		PrintStorePop3L(aEntry);
+		}
+	else if ( entry.iMtm == KUidMsgTypeIMAP4 )
+		{
+		PrintStoreImap4L(aEntry);
+		}
+	else if ( entry.iMtm == KUidMsgTypeSMS )
+		{
+		PrintStoreSmsL(aEntry);
+		}
+	}
+
+void CTestMessBase::PrintStoreSmtpL(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CImSmtpSettings*	settings = new(ELeave) CImSmtpSettings();
+		CleanupStack::PushL(settings);
+#ifdef __MESSAGING_API_V2__
+		CEmailAccounts*		accounts = CEmailAccounts::NewLC();
+		TSmtpAccount smtpAccountId;
+		accounts->GetSmtpAccountL(aEntry.EntryId(), smtpAccountId);
+		TRAPD(err, accounts->LoadSmtpSettingsL(smtpAccountId, *settings));
+		CleanupStack::PopAndDestroy(accounts);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			ptrTemp.Set(settings->ServerAddress());
+			INFO_PRINTF2(_L("  ServerAddress                : %S"), &ptrTemp);
+#ifndef __MESSAGING_API_V2__
+			ptrTemp.Set(settings->UserAddress());
+			INFO_PRINTF2(_L("  UserAddress                  : %S"), &ptrTemp);
+			INFO_PRINTF2(_L("  Version                      : %x"), (TUint)settings->Version());
+#endif
+			INFO_PRINTF2(_L("  Port                         : %x"), settings->Port());
+			INFO_PRINTF2(_L("  SecureSockets                : %x"), (TUint)settings->SecureSockets());
+			ptrTemp.Set(settings->EmailAlias());
+			INFO_PRINTF2(_L("  EmailAlias                   : %S"), &ptrTemp);
+			ptrTemp.Set(settings->EmailAddress());
+			INFO_PRINTF2(_L("  EmailAddress                 : %S"), &ptrTemp);
+			ptrTemp.Set(settings->ReplyToAddress());
+			INFO_PRINTF2(_L("  ReplyToAddress               : %S"), &ptrTemp);
+			ptrTemp.Set(settings->ReceiptAddress());
+			INFO_PRINTF2(_L("  ReceiptAddress               : %S"), &ptrTemp);
+			if ( settings->RequestReceipts() != 0 )
+				{
+				INFO_PRINTF2(_L("  RequestReceipts              : %x"), (TUint)settings->RequestReceipts());
+				}
+			if ( settings->SendCopyToSelf() != 0 )
+				{
+				INFO_PRINTF2(_L("  SendCopyToSelf               : %x"), (TUint)settings->SendCopyToSelf());
+				}
+			INFO_PRINTF2(_L("  SendMessageOption            : %x"), (TUint)settings->SendMessageOption());
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::PrintStorePop3L(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CImPop3Settings*	settings = new(ELeave) CImPop3Settings();
+		CleanupStack::PushL(settings);
+
+#ifdef __MESSAGING_API_V2__
+		CEmailAccounts*		accounts = CEmailAccounts::NewLC();
+		TPopAccount popAccountId;
+		accounts->GetPopAccountL(aEntry.EntryId(), popAccountId);
+		TRAPD(err, accounts->LoadPopSettingsL(popAccountId, *settings));
+		CleanupStack::PopAndDestroy(accounts);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			ptrTemp.Set(settings->ServerAddress());
+			INFO_PRINTF2(_L("  ServerAddress                : %S"), &ptrTemp);
+#ifndef __MESSAGING_API_V2__
+			ptrTemp.Set(settings->UserAddress());
+			INFO_PRINTF2(_L("  UserAddress                  : %S"), &ptrTemp);
+			INFO_PRINTF2(_L("  Version                      : %x"), (TUint)settings->Version());
+#endif
+			INFO_PRINTF2(_L("  Port                         : %x"), settings->Port());
+			INFO_PRINTF2(_L("  SecureSockets                : %x"), (TUint)settings->SecureSockets());
+			HBufC*	loginName=CopyToBufLC(settings->LoginName());
+			INFO_PRINTF2(_L("  LoginName                    : %S"), loginName);
+			CleanupStack::PopAndDestroy(loginName);
+			if ( settings->AutoSendOnConnect() != 0 )
+				{
+				INFO_PRINTF2(_L("  AutoSendOnConnect            : %x"), (TUint)settings->AutoSendOnConnect());
+				}
+			if ( settings->Apop() != 0 )
+				{
+				INFO_PRINTF2(_L("  Apop                         : %x"), (TUint)settings->Apop());
+				}
+			if ( settings->DisconnectedUserMode() != 0 )
+				{
+				INFO_PRINTF2(_L("  DisconnectedUserMode         : %x"), (TUint)settings->DisconnectedUserMode());
+				}
+			if ( settings->DeleteEmailsWhenDisconnecting() != 0 )
+				{
+				INFO_PRINTF2(_L("  DeleteEmailsWhenDisconnecting: %x"), (TUint)settings->DeleteEmailsWhenDisconnecting());
+				}
+			if ( settings->AcknowledgeReceipts() != 0 )
+				{
+				INFO_PRINTF2(_L("  AcknowledgeReceipts          : %x"), (TUint)settings->AcknowledgeReceipts());
+				}
+			if ( settings->MaxEmailSize() != 0 )
+				{
+				INFO_PRINTF2(_L("  MaxEmailSize                 : %x"), (TUint)settings->MaxEmailSize());
+				}
+			if ( settings->GetMailOptions() != 0 )
+				{
+				INFO_PRINTF2(_L("  GetMailOptions               : %x"), (TUint)settings->GetMailOptions());
+				}
+			if ( settings->InboxSynchronisationLimit() != 0 )
+				{
+				INFO_PRINTF2(_L("  InboxSynchronisationLimit    : %x"), (TUint)settings->InboxSynchronisationLimit());
+				}
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::PrintStoreImap4L(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CImImap4Settings*	settings = new(ELeave) CImImap4Settings();
+		CleanupStack::PushL(settings);
+
+#ifdef __MESSAGING_API_V2__
+		CEmailAccounts*		accounts = CEmailAccounts::NewLC();
+		TImapAccount imapAccountId;
+		accounts->GetImapAccountL(aEntry.EntryId(), imapAccountId);
+		TRAPD(err, accounts->LoadImapSettingsL(imapAccountId, *settings));
+		CleanupStack::PopAndDestroy(accounts);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			ptrTemp.Set(settings->ServerAddress());
+			INFO_PRINTF2(_L("  ServerAddress                : %S"), &ptrTemp);
+#ifndef __MESSAGING_API_V2__
+			ptrTemp.Set(settings->UserAddress());
+			INFO_PRINTF2(_L("  UserAddress                  : %S"), &ptrTemp);
+			INFO_PRINTF2(_L("  Version                      : %x"), (TUint)settings->Version());
+#endif
+			INFO_PRINTF2(_L("  Port                         : %x"), settings->Port());
+			INFO_PRINTF2(_L("  SecureSockets                : %x"), (TUint)settings->SecureSockets());
+
+			HBufC*	loginName=CopyToBufLC(settings->LoginName());
+			INFO_PRINTF2(_L("  LoginName                    : %S"), loginName);
+			HBufC*	folderPath=CopyToBufLC(settings->FolderPath());
+			INFO_PRINTF2(_L("  FolderPath                   : %S"), folderPath);
+			CleanupStack::PopAndDestroy(2, loginName);
+			if ( settings->PathSeparator() != 0 )
+				{
+				INFO_PRINTF2(_L("  PathSeparator                : %c"), (TText)settings->PathSeparator());
+				}
+			if ( settings->DisconnectedUserMode() != 0 )
+				{
+				INFO_PRINTF2(_L("  DisconnectedUserMode         : %x"), (TUint)settings->DisconnectedUserMode());
+				}
+			if ( settings->Synchronise() != 0 )
+				{
+				INFO_PRINTF2(_L("  Synchronise                  : %x"), (TUint)settings->Synchronise());
+				}
+			if ( settings->Subscribe() != 0 )
+				{
+				INFO_PRINTF2(_L("  Subscribe                    : %x"), (TUint)settings->Subscribe());
+				}
+			if ( settings->AutoSendOnConnect() != 0 )
+				{
+				INFO_PRINTF2(_L("  AutoSendOnConnect            : %x"), (TUint)settings->AutoSendOnConnect());
+				}
+			if ( settings->MaxEmailSize() != 0 )
+				{
+				INFO_PRINTF2(_L("  MaxEmailSize                 : %x"), (TUint)settings->MaxEmailSize());
+				}
+			if ( settings->DeleteEmailsWhenDisconnecting() != 0 )
+				{
+				INFO_PRINTF2(_L("  DeleteEmailsWhenDisconnecting: %x"), (TUint)settings->DeleteEmailsWhenDisconnecting());
+				}
+			if ( settings->AcknowledgeReceipts() != 0 )
+				{
+				INFO_PRINTF2(_L("  AcknowledgeReceipts          : %x"), (TUint)settings->AcknowledgeReceipts());
+				}
+			if ( settings->GetMailOptions() != 0 )
+				{
+				INFO_PRINTF2(_L("  GetMailOptions               : %x"), (TUint)settings->GetMailOptions());
+				}
+			if ( settings->InboxSynchronisationLimit() != 0 )
+				{
+				INFO_PRINTF2(_L("  InboxSynchronisationLimit    : %x"), (TUint)settings->InboxSynchronisationLimit());
+				}
+			if ( settings->MailboxSynchronisationLimit() != 0 )
+				{
+				INFO_PRINTF2(_L("  MailboxSynchronisationLimit  : %x"), (TUint)settings->MailboxSynchronisationLimit());
+				}
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::PrintStoreSmsL(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CSmsSettings*	settings = CSmsSettings::NewL();
+		CleanupStack::PushL(settings);
+
+#ifdef __MESSAGING_API_V2__
+		CSmsAccount*		smsAccount = CSmsAccount::NewLC();
+		TRAPD(err, smsAccount->LoadSettingsL(*settings));
+		CleanupStack::PopAndDestroy(smsAccount);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			TSmsDelivery	delivery(settings->Delivery());
+			INFO_PRINTF2(_L("  Delivery                     : %d"), delivery);
+			CSmsSettings::TSmsReportHandling	reportHandling(settings->StatusReportHandling());
+			INFO_PRINTF2(_L("  StatusReportHandling         : %d"), reportHandling);
+			CSmsSettings::TSmsReportHandling	specialMsgHandling(settings->SpecialMessageHandling());
+			INFO_PRINTF2(_L("  SpecialMessageHandling       : %d"), specialMsgHandling);
+			INFO_PRINTF2(_L("  ReplyQuoted                  : %d"), settings->ReplyQuoted());
+#ifdef __MESSAGING_API_V2__
+			const TInt	numSCAddr = settings->ServiceCenterCount();
+#else
+			const TInt	numSCAddr = settings->NumSCAddresses();
+#endif
+			for( TInt index=0;index<numSCAddr;index++ )
+				{
+#ifdef __MESSAGING_API_V2__
+				CSmsServiceCenter&	scAddr = settings->GetServiceCenter(index);
+#else
+				CSmsNumber&			scAddr = settings->SCAddress(index);
+#endif
+				ptrTemp.Set(scAddr.Name());
+				INFO_PRINTF2(_L("  SC Name                      : %S"), &ptrTemp);
+				ptrTemp.Set(scAddr.Address());
+				INFO_PRINTF2(_L("  SC Address                   : %S"), &ptrTemp);
+				}
+			CSmsSettings::TSmsSettingsCommDbAction	commDbAction(settings->SmsBearerAction());
+			INFO_PRINTF2(_L("  SmsBearerAction              : %d"), commDbAction);
+
+			CSmsSettings::TMobileSmsBearer	smsBearer(settings->SmsBearer());
+			INFO_PRINTF2(_L("  SmsBearer                    : %d"), smsBearer);
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::IssueTimerRequest()
+	{
+	if (iMessageTimer!= NULL)
+		{
+		iMessageTimer->IssueRequest();
+		}
+	}
+
+void CTestMessBase::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny*, TAny*)
+/**
+ Handler for the Session Event
+ @param aEvent - TMsvSessionEvent object
+ @param aArg1 - TAny object pointer, used to store the argument for the event
+ @leave - System wide error codes
+*/
+	{
+	TBool	printSelection=EFalse;
+
+	switch (aEvent)
+		{
+	case EMsvEntriesCreated:
+		INFO_PRINTF1(_L("EMsvEntriesCreated"));
+		printSelection=ETrue;
+		break;
+	case EMsvEntriesChanged:
+		INFO_PRINTF1(_L("EMsvEntriesChanged"));
+		printSelection=ETrue;
+		break;
+	case EMsvEntriesDeleted:
+		INFO_PRINTF1(_L("EMsvEntriesDeleted"));
+		break;
+	case EMsvEntriesMoved:
+		INFO_PRINTF1(_L("EMsvEntriesMoved"));
+		printSelection=ETrue;
+		break;
+	case EMsvMtmGroupInstalled:
+		INFO_PRINTF1(_L("EMsvMtmGroupInstalled"));
+		break;
+	case EMsvMtmGroupDeInstalled:
+		INFO_PRINTF1(_L("EMsvMtmGroupDeInstalled"));
+		break;
+	case EMsvGeneralError:
+		INFO_PRINTF1(_L("EMsvGeneralError"));
+		break;
+	case EMsvCloseSession:
+		INFO_PRINTF1(_L("EMsvCloseSession"));
+		break;
+	case EMsvServerReady:
+		INFO_PRINTF1(_L("EMsvServerReady"));
+		break;
+	case EMsvServerFailedToStart:
+		INFO_PRINTF1(_L("EMsvServerFailedToStart"));
+		break;
+	case EMsvCorruptedIndexRebuilt:
+		INFO_PRINTF1(_L("EMsvCorruptedIndexRebuilt"));
+		break;
+	case EMsvServerTerminated:
+		INFO_PRINTF1(_L("EMsvServerTerminated"));
+		break;
+	case EMsvMediaChanged:
+		INFO_PRINTF1(_L("EMsvMediaChanged"));
+		break;
+	case EMsvMediaUnavailable:
+		INFO_PRINTF1(_L("EMsvMediaUnavailable"));
+		break;
+	case EMsvMediaAvailable:
+		INFO_PRINTF1(_L("EMsvMediaAvailable"));
+		break;
+	case EMsvMediaIncorrect:
+		INFO_PRINTF1(_L("EMsvMediaIncorrect"));
+		break;
+	case EMsvCorruptedIndexRebuilding:
+		INFO_PRINTF1(_L("EMsvCorruptedIndexRebuilding"));
+		break;
+	default:
+		INFO_PRINTF2(_L("EMsv Unknown event:%d"), aEvent);
+		break;
+	}
+
+	if ( printSelection )
+		{
+		CMsvEntrySelection*	selection=STATIC_CAST(CMsvEntrySelection*, aArg1);
+		CMsvEntry*			entry=NULL;
+		for ( int i=0; i<selection->Count(); )
+			{
+			entry=iSession->GetEntryL(selection->At(i++));
+			CleanupStack::PushL(entry);
+			PrintEntryL(*entry);
+			CleanupStack::PopAndDestroy(entry);
+			}
+		}
+	}
+
+
+void CTestMessBase::PrepareSmsHeaderFromIniFileL(CSmsHeader& aSmsHeader)
+	{
+	// Starts the Bitmap server
+	FbsStartup();
+	// start the server
+	RFbsSession::Connect();
+
+	// Add the Fromating required for EMS if required
+	TInt	emsElements=0;
+	if ( !GetIntFromConfig(ConfigSection(), KElements, emsElements) )
+		{
+		ERR_PRINTF1(_L("Elements not set"));
+		SetTestStepResult(EFail);
+		}
+
+// Macro usage for CDMA mtm
+#if (defined CDMA_API_ENABLED)
+	TMsvMessageSms&	message=aSmsHeader.SmsMessage();
+#else
+	CSmsMessage&	message=aSmsHeader.Message(); 
+#endif
+
+	TBuf<KMaxTestExecuteCommandLength>	tempStore;
+	for ( TInt element=0; element<emsElements && TestStepResult()==EPass;)
+		{
+		++element;
+		INFO_PRINTF2(_L("==== PROCESSING ELEMENT %d ===="), element);
+		//	Start position
+		tempStore.Format(KStartPosition, element);
+		TInt	startPosition=KDefaultStartPos;
+		if ( GetIntFromConfig(ConfigSection(), tempStore, startPosition) )
+			{
+			INFO_PRINTF2(_L("Start position %d"), startPosition);
+			}
+
+		//	File
+		tempStore.Format(KFile, element);
+		TPtrC	file;
+		TParse	fileName;
+		TBool	hasFile=GetStringFromConfig(ConfigSection(), tempStore, file);
+		if ( hasFile )
+			{
+			INFO_PRINTF2(_L("File %S"), &file);
+			fileName.Set(file,NULL,NULL);
+			}
+
+		tempStore.Format(KType, element);
+		TPtrC	type;
+		if ( GetStringFromConfig(ConfigSection(), tempStore, type) )
+			{
+			if ( type.Compare(KTypeFormat) == 0 )
+				{
+				//	=== Process text formating Information Element ===
+				CEmsFormatIE*	newElement=CEmsFormatIE::NewL();
+				CleanupStack::PushL(newElement);
+				newElement->SetStartPosition(startPosition);
+
+				TInt			intTemp;
+				TBool			boolTemp;
+				TPtrC			alignment;
+				TPtrC			fontSize;
+
+				// Set the Format length and other information
+				tempStore.Format(KFormatLength, element);
+				if ( GetIntFromConfig(ConfigSection(), tempStore, intTemp) )
+					{
+					INFO_PRINTF2(_L("Format Length %d"), intTemp);
+					newElement->SetFormatLength(intTemp);
+					}
+				tempStore.Format(KBold, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Bold %d"), boolTemp);
+					newElement->SetBold(boolTemp);
+					}
+				tempStore.Format(KItalic, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Italic %d"), boolTemp);
+				    newElement->SetItalic(boolTemp);
+					}
+				tempStore.Format(KUnderline, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Underline %d"), boolTemp);
+					newElement->SetUnderline(boolTemp);
+					}
+				tempStore.Format(KStrikethrough, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Strikethrough %d"), boolTemp);
+					newElement->SetStrikethrough(boolTemp);
+					}
+				tempStore.Format(KAlignment,element);
+				if(GetStringFromConfig(ConfigSection(),tempStore,alignment))
+					{
+					SetAlignmentFormat(*newElement, alignment);
+					}
+				
+				tempStore.Format(KFontSize,element);
+				if(GetStringFromConfig(ConfigSection(),tempStore,fontSize))
+					{
+					//
+					SetFontSizeFormat(*newElement, fontSize);
+					}
+			    message.AddEMSInformationElementL(*newElement); 
+				CleanupStack::PopAndDestroy(newElement);
+				}
+			else if ( type.Compare(KTypeSound) == 0 )
+				{
+				//	=== Process sound Information Element ===
+				if ( hasFile )
+					{
+					HBufC8*			buffFile=CopyToBuf8LC(fileName.FullName());
+					CEmsSoundIE*	newElement=CEmsSoundIE::NewL(buffFile->Des());
+					CleanupStack::PushL(newElement);
+					newElement->SetStartPosition(startPosition); 
+				    message.AddEMSInformationElementL(*newElement); 
+					CleanupStack::PopAndDestroy(2, buffFile);
+					}
+				else
+					{
+					ERR_PRINTF1(_L("No Sound file name"));
+					SetTestStepResult(EFail);
+					}
+				}
+			else if ( type.Compare(KTypePreDefSound) == 0 )
+				{
+				//	=== Process predefined sound Information Element ===
+				TPtrC	preDefSound;
+				tempStore.Format(KEmsPreDef, element);
+				if ( !GetStringFromConfig(ConfigSection(),tempStore, preDefSound))
+					{
+					ERR_PRINTF1(_L("Predefined sound not present"));
+					SetTestStepResult(EFail);
+					}
+				else
+					{
+					INFO_PRINTF2(_L("Predefined sound %S"), &preDefSound);
+					CEmsPreDefSoundIE*	newElement=NewPreDefSoundL(preDefSound);
+
+					if ( newElement != NULL )
+						{
+						//Assign the predef animation element to newElement
+						CleanupStack::PushL(newElement);
+						newElement->SetStartPosition(startPosition);
+					    message.AddEMSInformationElementL(*newElement); 
+						CleanupStack::PopAndDestroy(newElement);
+						}
+					else
+						{
+						ERR_PRINTF1(_L("Unable to create predefined sound"));
+						SetTestStepResult(EFail);
+						}
+					}
+				}
+			else if ( type.Compare(KTypeAnimation) == 0 )
+				{
+				//	=== Process animation Information Element ===
+				if ( hasFile )
+					{
+					TPtrC	objectSize;
+
+					tempStore.Format(KObjectSize, element);
+					if ( !GetStringFromConfig(ConfigSection(),tempStore,objectSize) )
+						{
+						ERR_PRINTF1(_L("No size provided"));
+						SetTestStepResult(EFail);
+						}
+					else
+						{
+						CFbsBitmap*	bmp=NewBitmapL(fileName, objectSize);
+						if ( bmp == NULL )
+							{
+							ERR_PRINTF1(_L("Failed to Load Animation File. Error %d"));
+							SetTestStepResult(EFail);
+							}
+						else
+							{
+							CleanupStack::PushL(bmp);
+							CEmsAnimationIE*	newElement=CEmsAnimationIE::NewL(*bmp);
+							CleanupStack::PushL(newElement);
+							newElement->SetStartPosition(startPosition);
+						    message.AddEMSInformationElementL(*newElement); 
+							CleanupStack::PopAndDestroy(2, bmp);
+							}
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("No Animation file name"));
+					SetTestStepResult(EFail);
+					}
+				}
+			else if ( type.Compare(KTypePreDefAnimation) == 0 )
+				{
+				//	=== Process predefined animation Information Element ===
+				TPtrC	preDefAnim;
+				tempStore.Format(KEmsPreDef, element);
+				if ( !GetStringFromConfig(ConfigSection(),tempStore, preDefAnim) )
+					{
+					ERR_PRINTF1(_L("Predefined animations not present"));
+					SetTestStepResult(EFail);
+					}
+				else
+					{
+					INFO_PRINTF2(_L("Predefined animation %S"), &preDefAnim);
+					CEmsPreDefAnimationIE*	newElement=NewPreDefAnimationL(preDefAnim);
+
+					if ( newElement != NULL )
+						{
+						//Assign the predef animation element to newElement
+						CleanupStack::PushL(newElement);
+						newElement->SetStartPosition(startPosition);
+					    message.AddEMSInformationElementL(*newElement); 
+						CleanupStack::PopAndDestroy(newElement);
+						}
+					else
+						{
+						ERR_PRINTF1(_L("Unable to create predefined animation"));
+						SetTestStepResult(EFail);
+						}
+					}
+				}
+			else if ( type.Compare(KTypePicture) == 0 )
+				{
+				//	=== Process picture Information Element ===
+				if ( hasFile )
+					{
+					TPtrC	objectSize;
+
+					tempStore.Format(KObjectSize, element);
+					if ( !GetStringFromConfig(ConfigSection(),tempStore,objectSize) )
+						{
+						ERR_PRINTF1(_L("No size provided"));
+						SetTestStepResult(EFail);
+						}
+					else
+						{
+						CFbsBitmap*	bmp=NewBitmapL(fileName, objectSize);
+						if ( bmp == NULL )
+							{
+							ERR_PRINTF1(_L("Failed to Load Animation File. Error %d"));
+							SetTestStepResult(EFail);
+							}
+						else
+							{
+							CleanupStack::PushL(bmp);
+							CEmsPictureIE*	newElement=CEmsPictureIE::NewL(*bmp);
+							CleanupStack::PushL(newElement);
+							newElement->SetStartPosition(startPosition);
+						    message.AddEMSInformationElementL(*newElement); 
+							CleanupStack::PopAndDestroy(2, bmp);
+							}
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("No Picture file name"));
+					SetTestStepResult(EFail);
+					}
+				}
+			else if ( type.Compare(KTypeUserPrompt) == 0 )
+				{
+				//	=== Process user prompt Information Element ===
+				CEmsUserPrompt*	newElement=CEmsUserPrompt::NewL(2);
+				CleanupStack::PushL(newElement);
+				newElement->SetStartPosition(startPosition);
+			    message.AddEMSInformationElementL(*newElement); 
+				CleanupStack::PopAndDestroy(newElement);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("Unknown element type %S"), &type);
+				SetTestStepResult(EFail);
+				}
+			}
+		else
+			{
+			ERR_PRINTF1(_L("No type given"));
+			SetTestStepResult(EFail);
+			}
+		}
+
+	RFbsSession::Disconnect(); 
+	}
+
+/**
+ This function reads the schedule time from ini file
+ @return - returns the schedule time read from the ini file
+*/
+TTimeIntervalMinutes CTestMessBase::ReadScheduleTime()
+	{
+	// Read  the schedule time from ini file. Add this schedule time to current time.
+	// This time will be set as the scheduled time for sending the SMS message from task scheduler
+	// By default schedule time will be 1 min
+	TInt	scheduled=0;
+	GetIntFromConfig(ConfigSection(), KScheduled, scheduled);
+	INFO_PRINTF2(_L("Scheduled Time in minutes is %d"), scheduled);
+	return TTimeIntervalMinutes(scheduled);
+	}
+
+void CTestMessBase::SetAlignmentFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aAlignment)
+	{
+	//Sets the alignment to the text
+	INFO_PRINTF2(_L("Alignment %S"), &aAlignment);
+	if( aAlignment.Compare(KLeftAlign)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ELeft);
+		}
+	else if( aAlignment.Compare(KRightAlign)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ERight);
+		}
+	else if( aAlignment.Compare(KCenterAlign)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ECenter);
+		}
+	else if( aAlignment.Compare(KLangDepend)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ELangDepend);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Illegal alignment value"));
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CTestMessBase::SetFontSizeFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aFontSize)
+	{
+	//Sets the specified font to the text 
+	INFO_PRINTF2(_L("FontSize %S"), &aFontSize);
+	if( aFontSize.Compare(KNormal)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::ENormal);
+		}
+	else if( aFontSize.Compare(KLarge)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::ELarge);
+		}
+	else if( aFontSize.Compare(KSmall)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::ESmall);
+		}
+	else if( aFontSize.Compare(KReserved)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::EReserved);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Illegal fonst size value"));
+		SetTestStepResult(EFail);
+		}
+	}
+
+CEmsPreDefAnimationIE* CTestMessBase::NewPreDefAnimationL(const TDesC& aPreDefType) 
+//
+// Attaches the required predef animation. 
+// Arguments - aString - holds the TAnim type to be attached 
+// Return Value - Returns a Pointer of CEmsPreDefAnimationIE 
+//
+	{
+	//Initialize emsPreDef to NULL
+	CEmsPreDefAnimationIE::TAnimType	animType=CEmsPreDefAnimationIE::EFlirty;
+	TBool								validType=ETrue;
+
+	//Set a value for emsPreDef 
+	if ( aPreDefType.Compare(KEmsAnimTypeFlirty) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EFlirty;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeGlad) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EGlad;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeSceptic) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ESceptic;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeSad) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ESad;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeWow) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EWow;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeCrying) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ECrying;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeWinking) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EWinking;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeLaughing) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ELaughing;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeIndifferent) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EIndifferent;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeKissing) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EKissing;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeConfused) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EConfused;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeTongueOut) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ETongueOut;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeAngry) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EAngry;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeGlasses) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EGlasses;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeDevil) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EDevil;
+		}
+	else
+		{
+		validType=EFalse;
+		}
+
+	CEmsPreDefAnimationIE*	emsPreDef=NULL;
+	if ( validType )
+		{
+		emsPreDef=CEmsPreDefAnimationIE::NewL(animType);
+		}
+
+	return emsPreDef;
+	}
+
+CEmsPreDefSoundIE* CTestMessBase::NewPreDefSoundL(const TDesC& aPreDefType) 
+//
+// Attaches the required predef animation. 
+// Arguments - aString - holds the TAnim type to be attached 
+// Return Value - Returns a Pointer of CEmsPreDefAnimationIE 
+//
+	{
+	//Initialize emsPreDef to NULL
+	CEmsPreDefSoundIE::TPredefinedSound	soundType=CEmsPreDefSoundIE::EChimesHigh;
+	TBool								validType=ETrue;
+
+	//Set a value for emsPreDef 
+	if ( aPreDefType.Compare(KEmsSoundTypeChimesHigh) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChimesHigh;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeChimesLow) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChimesLow;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeDing) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EDing;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeTaDa) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::ETaDa;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeNotify) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::ENotify;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeDrum) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EDrum;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeClaps) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EClaps;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeFanFar) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EFanFar;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeChordHigh) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChordHigh;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeChordLow) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChordLow;
+		}
+	else
+		{
+		validType=EFalse;
+		}
+
+	CEmsPreDefSoundIE*	emsPreDef=NULL;
+	if ( validType )
+		{
+		emsPreDef=CEmsPreDefSoundIE::NewL(soundType);
+		}
+
+	return emsPreDef;
+	}
+
+CFbsBitmap* CTestMessBase::NewBitmapL(const TParse& aFileName, const TDesC& aObjectSize)
+	{
+	TInt	bitmapType=KSmallObject;
+	TBool	validType=ETrue;
+	if( aObjectSize.Compare(KSmall) == 0 )
+		{
+		bitmapType=KSmallObject;
+		}
+	else if ( aObjectSize.Compare(KLarge) == 0 )
+		{
+		bitmapType=KLargeObject;
+		}
+	else if ( aObjectSize.Compare(KVariable) == 0 )
+		{
+		bitmapType=KVariableObject;
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Invalid bitmap type %S"), &aObjectSize);
+		validType=EFalse;
+		}
+
+	CFbsBitmap*	bmp = NULL;
+	if ( validType )
+		{
+		bmp = new (ELeave) CFbsBitmap();
+
+		TInt	error = bmp->Load(aFileName.FullName(), bitmapType, EFalse);
+		INFO_PRINTF2(_L("Bimap load %d"), error);
+		if ( error != KErrNone)
+			{
+			delete bmp;
+			bmp=NULL;
+			}
+		}
+
+	return bmp;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessCleanMessageFolder.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,172 @@
+// 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"
+// which accompanies 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 contains CTestMessCleanMessageFolder which cleans out all the
+// message folders
+// 
+//
+
+#include "TestMessCleanMessageFolder.h"
+
+// EPOC includes
+#include <msvids.h>
+#include <test/testexecuteclient.h>
+
+#ifdef __MESSAGING_API_V2__
+#include <cemailaccounts.h>
+#endif
+
+_LIT(KMessageCount, "messagecount");
+
+CTestMessCleanMessageFolder::CTestMessCleanMessageFolder()
+:	CTestMessBase(ETrue)
+,	iNumberOfMessagesToDelete(-1)		//	Negative value implies delete all
+	{
+	SetTestStepName(_L("CleanMessageFolder"));
+	}
+
+TVerdict CTestMessCleanMessageFolder::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Clean message folder"));
+
+	if ( GetIntFromConfig(ConfigSection(), KMessageCount, iNumberOfMessagesToDelete) )
+		{
+		INFO_PRINTF2(_L("Message count read from the ini file is  %D"), iNumberOfMessagesToDelete);
+		}
+	else
+		{
+		WARN_PRINTF1(_L("No Count specified in the ini file"));
+		WARN_PRINTF1(_L("All the messages will be deleted"));
+		}
+
+	if ( TestStepResult() == EPass )
+		{
+		//delete the contents of the folder
+		CleanFolders(EntryL().EntryId());
+
+		if ( iNumberOfMessagesToDelete<=0 )
+			{
+			INFO_PRINTF1(_L("Messages deleted"));
+			}
+		else
+			{
+			ERR_PRINTF2(_L("%d Outstanding entries not deleted."), iNumberOfMessagesToDelete);
+			SetTestStepResult(EFail);
+			}
+		}
+
+	return TestStepResult();
+	}
+
+void CTestMessCleanMessageFolder::CleanFolders(const TMsvId aEntryId)
+	{
+#ifdef __MESSAGING_API_V2__
+	if ( aEntryId == KMsvRootIndexEntryId )
+		{
+		CEmailAccounts*	accounts = CEmailAccounts::NewLC();
+
+		RArray<TPopAccount>	pop3Accounts;
+		CleanupClosePushL(pop3Accounts);
+		accounts->GetPopAccountsL(pop3Accounts);
+		TInt	count = pop3Accounts.Count();
+		TInt	index=0;
+		for( index = 0; index < count; index++ )
+			{
+			TPopAccount	id = pop3Accounts[index];
+			accounts->DeletePopAccountL( id );
+			}
+
+		RArray<TImapAccount>	imap4Accounts;
+		CleanupClosePushL(imap4Accounts);
+		accounts->GetImapAccountsL(imap4Accounts);
+		count = imap4Accounts.Count();
+		for( TInt index = 0; index < count; index++ )
+			{
+			TImapAccount	id = imap4Accounts[index];
+			accounts->DeleteImapAccountL( id );
+			}
+
+		CleanupStack::PopAndDestroy(3, accounts);
+		}
+#endif
+
+	SetEntryL(aEntryId);
+	EntryL().SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=EntryL().ChildrenL();
+	CleanupStack::PushL(selection);
+	TInt				count=selection->Count();
+	TInt				i;
+	for (i=count; i>0; )
+		{
+		TMsvId	childId=selection->At(--i);
+
+		SetEntryL(aEntryId);
+		if( iNumberOfMessagesToDelete!=0 )
+			{
+			TRAPD(err, EntryL().DeleteL(childId));
+			switch ( err )
+				{
+			case KErrNone:
+				INFO_PRINTF2(_L("DeletedId      : %x"), childId);
+				if ( iNumberOfMessagesToDelete > 0 )
+					{
+					--iNumberOfMessagesToDelete;
+					}
+				break;
+			case KErrAccessDenied:
+				INFO_PRINTF2(_L("Access Denied  : %x"), childId);
+				break;
+			default:
+				ERR_PRINTF3(_L("Deletion Error : %d , Id : %x "), err, childId);
+				SetTestStepResult(EFail);
+				break;
+				}
+			}
+		}
+	CleanupStack::PopAndDestroy(selection);
+
+	EntryL().SetSortTypeL(SelectionOrdering());
+	selection=EntryL().ChildrenL();
+	CleanupStack::PushL(selection);
+	count=selection->Count();
+	for (i=count; i>0; )
+		{
+		TMsvId	childId=selection->At(--i);
+
+		//	Log child
+		CleanFolders(childId);
+
+		SetEntryL(aEntryId);
+
+		TRAPD(err, EntryL().DeleteL(childId));
+		switch ( err )
+			{
+		case KErrNone:
+			INFO_PRINTF2(_L("DeletedId      : %x"), childId);
+			if ( iNumberOfMessagesToDelete > 0 )
+				{
+				--iNumberOfMessagesToDelete;
+				}
+			break;
+		case KErrAccessDenied:
+			INFO_PRINTF2(_L("Access Denied  : %x"), childId);
+			break;
+		default:
+			ERR_PRINTF3(_L("Deletion Error : %d , Id : %x "), err, childId);
+			SetTestStepResult(EFail);
+			break;
+			}
+		}
+	CleanupStack::PopAndDestroy(selection);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessCreateCdmaSmsUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,433 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessCreateCdmsSmsUtil.cpp
+// This class creates the Cdma sms header and the service settings
+// 
+//
+
+#include "TestMessCreateCdmaSmsUtil.h"
+#include "TestMessCreateSmsAccount.h"
+
+// EPOC includes
+#include <csmsaccount.h>
+
+/*@{*/
+_LIT(KPtDeliveryAck,			"DeliveryAck");
+_LIT(KPtUserAck,				"UserAck");
+_LIT(KPtReadAck,				"ReadAck");
+_LIT(KPtMessageConversion,		"MessageConversion");
+_LIT(KPtPriorityIndicator,		"PriorityIndicator");
+_LIT(KPtPrivacyIndicator,		"PrivacyIndicator");
+_LIT(KPtReplyOption,			"ReplyOption");
+_LIT(KPtAlertonDelivery,		"AlertonDelivery");
+_LIT(KPtLanguageIndicator,		"LanguageIndicator");
+
+//Constants used
+_LIT(KPtTeleService,			"TeleService");
+_LIT(KPtSubmit,					"Submit");
+_LIT(KPtCancel,					"Cancel");
+
+// Supported Teleservices
+_LIT(KPtTeleWmt,				"WMT");
+_LIT(KPtTeleWemt,				"WEMT");
+_LIT(KPtTeleWpt,				"WPT");
+_LIT(KPtTeleVmn,				"VMN");
+_LIT(KPtTeleScpt,				"SCPT");
+_LIT(KPtTeleCatpt,				"CATPT");
+_LIT(KPtTeleCmt91,				"CMT91");
+_LIT(KPtTeleWap,				"WAP");
+
+// Supported message conversion formats
+_LIT(KPtPidFax,					"Fax");
+_LIT(KPtPidX400,				"X400");
+_LIT(KPtPidPaging,				"Paging");
+_LIT(KPtPidMail,				"Mail");
+_LIT(KPtPidErmes,				"Ermes");
+_LIT(KPtPidSpeech,				"Speech");
+/*@}*/
+
+/**
+ Constructor
+*/
+CTestMessCreateCdmaSmsUtil ::CTestMessCreateCdmaSmsUtil(CTestMessBase& aTestStep)
+: 	CTestMessCreateSmsUtilBase(aTestStep)
+	{
+	aTestStep.INFO_PRINTF1(_L("The CDMA SMS util is created"));
+	}
+
+/**
+ Prepares the SMS account details for CSendAs/RSendAs
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+void CTestMessCreateCdmaSmsUtil::PrepareAccountL(CMsvSession& /*aSession*/)
+	{
+	// Reads the teleservice
+	tia637::TTeleserviceId	teleServiceId=tia637::KTeleserviceWMT;
+	TPtrC 					ptrTeleService;
+	if( !(iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KPtTeleService, ptrTeleService)))
+		{
+		iTestStep.INFO_PRINTF1(_L("Teleservice is not provided. Default teleservice (WMT) is used"));
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF2(_L("Teleservice to be set is : %S"), &ptrTeleService);
+
+		//Get the teleservice Id
+		teleServiceId = GetTeleServiceId(ptrTeleService);
+		}
+
+	if ( teleServiceId!=tia637::KTeleserviceWEMT )
+		{
+		teleServiceId=tia637::KTeleserviceWMT;
+		}
+
+	CSmsSettings*	smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+
+	CSmsAccount*	smsAccount=CSmsAccount::NewLC();
+	smsAccount->LoadSettingsL(*smsSettings);
+	smsSettings->SetDefaultTeleservice(teleServiceId);
+	smsAccount->SaveSettingsL(*smsSettings);
+	CleanupStack::PopAndDestroy(smsAccount);
+	CleanupStack::PopAndDestroy(smsSettings);
+	}
+
+/**
+ Creates a new CDMA sms header object
+ @param aBodyText - body text of the message
+ @return CSmsHeader - pointer of the CSmsHeader object
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+CSmsHeader* CTestMessCreateCdmaSmsUtil::NewHeaderL(CRichText& aBodyText)
+	{
+	return CSmsHeader::NewL(KSmsTypeSubmit, aBodyText);
+	}
+
+/**
+ Fill up the header object with data read from the ini file
+ @param aSmsHeader - reference for the sms header object
+ @leave - System wide error codes
+*/
+void CTestMessCreateCdmaSmsUtil::PrepareHeaderL(CSmsHeader& aSmsHeader)
+	{
+	//	Get bearer data
+	TPtrC	ptrBearer;
+	TBool	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KBearer, ptrBearer);
+	if ( !returnValue )
+		{
+		//If no bearer provided, the bearer is read from the default section ofthe
+		// ini file
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefBearer, ptrBearer);
+		}
+
+	if ( returnValue )
+		{
+		//default value for the bearer
+		TBioMsgIdType	bearer = EBioMsgIdNbs;
+
+		iTestStep.INFO_PRINTF2(_L("Bearer = %S"), &ptrBearer);
+		if (ptrBearer.CompareF(KBearerWap) == 0)
+			{
+			//Wap message ID
+			bearer = EBioMsgIdWap;
+			}
+		else if (ptrBearer.CompareF(KBearerWapSecure) == 0)
+			{
+			//WapSecure message ID
+			bearer = EBioMsgIdWapSecure;
+			}
+		else
+			{
+			iTestStep.ERR_PRINTF1(_L("No bearer provided. Default is used"));
+			}
+
+		//Set the BIO Message ID type
+		aSmsHeader.BioMessage().SetBioMsgIdType(bearer);
+		}
+
+	//	Get encoding data
+	TInt	encoding;
+	returnValue=iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KEncoding, encoding);
+	if ( !returnValue )
+		{
+		//If no encoding is provided, the encoding is read from the default section 
+		//of the ini file
+		returnValue=iTestStep.GetIntFromConfig(KDef, KDefEncoding, encoding);
+		}
+	if ( returnValue )
+		{
+		//Default encoding value.
+		TSmsCharacterEncoding charEncoding = KSmsEncodingUnicode;
+
+		iTestStep.INFO_PRINTF2(_L("Encoding = %d"), encoding);
+		switch (encoding)
+			{
+		case 7:
+			//7 bit encoding format
+			charEncoding = KSmsEncoding7BitASCII;
+			break;
+		case 8:
+			//8 bit encoding format
+			charEncoding = KSmsEncodingBinary;
+			break;
+		case 16:
+			//unicode encoding format
+			charEncoding = KSmsEncodingUnicode;
+			break;
+		default:
+			//default encoding format
+			charEncoding = KSmsEncodingUnicode;
+			break;
+			}
+		//Set the character encoding format
+		aSmsHeader.BioMessage().SetEncoding(charEncoding);
+		}
+
+	
+	TBool	deliveryAck = EFalse;
+	TBool	userAck = EFalse;
+	TBool	readAck = EFalse;
+
+	//	Get acknowledgements report request
+	TPtrC	ptrDeliveryReport;
+	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KDeliveryReport, ptrDeliveryReport);
+	if ( !returnValue )
+		{
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefDeliveryReport, ptrDeliveryReport);
+		}
+	if ( returnValue )
+		{
+		iTestStep.INFO_PRINTF2(_L("The acknowledgement request flag : %S"), &ptrDeliveryReport);
+		if(ptrDeliveryReport.Compare(_L("NO")) == 0)
+			{
+			deliveryAck = EFalse;
+			userAck = EFalse;
+			readAck = EFalse;
+			}
+		if(ptrDeliveryReport.Compare(_L("YES")) == 0)
+			{
+			// Read different type of acknowledgements
+			iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtDeliveryAck, deliveryAck);
+			iTestStep.INFO_PRINTF2(_L("The Delivery acknowledgement request flag : %d"), deliveryAck);
+			iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtUserAck, userAck);
+			iTestStep.INFO_PRINTF2(_L("The User acknowledgement request flag : %d"), userAck);
+			iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtReadAck, readAck);
+			iTestStep.INFO_PRINTF2(_L("The Read acknowledgement request flag : %d"), readAck);
+			}
+		}
+	
+	aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeDelivery, deliveryAck);
+	aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeUser, userAck);
+	aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeRead, readAck);
+	
+	//Get the message conversion type
+	TPtrC	ptrMessageConversion;
+	TSmsPIDConversion smsPidConversion = ESmsConvPIDNone;
+	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KPtMessageConversion, ptrMessageConversion);
+	if ( !returnValue )
+		{
+		iTestStep.INFO_PRINTF1(_L("The message conversion is not provided. Default (PIDNone) is taken"));
+		}
+	if ( returnValue )
+		{
+		iTestStep.INFO_PRINTF2(_L("The message conversion to be set is  : %S"), &ptrMessageConversion);
+		//Get the Message conversion id
+		smsPidConversion = GetMessageConversionId(ptrMessageConversion);
+		}
+	//Set the message conversion.
+	CSmsSettings *smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	aSmsHeader.GetDefaultMessageSettingsL(*smsSettings);
+	smsSettings->SetMessageConversion(smsPidConversion);
+	CleanupStack::Pop(smsSettings);
+
+	// Set the other message settings
+	aSmsHeader.CdmaMessage().SetPrivacyIndicatorL(tia637::KBdRestricted);
+	aSmsHeader.CdmaMessage().SetPriorityIndicatorL(tia637::KBdUrgent);
+	aSmsHeader.CdmaMessage().SetAlertOnDeliveryL(tia637::KBdUseMediumPriorityAlert);
+	aSmsHeader.CdmaMessage().SetLanguageIndicatorL(tia637::KLanguageEnglish);
+	}
+
+/**
+ Sets the cdma sms service settings fields using data read from the
+ ini file. If no data is provided/read from ini file, the default 
+ account settings is used.
+ @param aSmsSettings - reference of the CSmsSettings
+*/
+void CTestMessCreateCdmaSmsUtil::SetSmsAccountSettings(CSmsSettings& aSmsSettings)
+	{
+	iTestStep.INFO_PRINTF1(_L("Set SMS account Settings...."));
+	TBool	boolTemp;
+	
+	//	Set the Reply quoted setting.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KReplyQuoted, boolTemp) )
+		{
+		aSmsSettings.SetReplyQuoted(boolTemp);
+		}
+
+	// Set the priority indicator
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtPriorityIndicator, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTPriorityIndicator, boolTemp);
+		}
+
+	//Set the Privacy Indicator	
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtPrivacyIndicator, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTPrivacyIndicator, boolTemp);
+		}
+
+	//Set the Reply option
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtReplyOption, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTReplyOption, boolTemp);
+		}
+
+	//Set the alert on Message deliver
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtAlertonDelivery, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTAlertOnMessageDelivery, boolTemp);
+		}
+
+	//Set the Language Indicator
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtLanguageIndicator, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTLanguageIndicator, boolTemp);
+		}
+
+	aSmsSettings.SetValidityPeriod(ESmsVPWeek);	// week 
+	aSmsSettings.SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger); //relative
+	aSmsSettings.SetDelivery(ESmsDeliveryImmediately);
+	}
+
+/**
+ Get the message type id
+ @param aMessageType - TPtrC object holding the message type
+ @return TSmsMessageType - message type id
+*/
+TSmsMessageType CTestMessCreateCdmaSmsUtil::GetMessageTypeId(const TDesC& aMessageType)
+	{
+	//Default message type is assigned
+	TSmsMessageType smsMessageType = KSmsTypeSubmit;
+
+	if( aMessageType.Compare(KPtSubmit) ==0)
+		{
+		smsMessageType = KSmsTypeSubmit;
+		}
+	else if( aMessageType.Compare(KPtCancel) ==0)
+		{
+		smsMessageType = KSmsTypeCdmaCancellation;
+		}
+	else
+		{
+		iTestStep.WARN_PRINTF1(_L("Invalid message type provided. Default is used"));
+		}
+	return smsMessageType;
+	}
+	
+/**
+ Gets the Teleservice Id
+ @param aTeleService - TPtrC holding the tele service name
+ @return tia637::TTeleserviceId - teleservice id
+*/
+tia637::TTeleserviceId CTestMessCreateCdmaSmsUtil::GetTeleServiceId(const TDesC& aTeleService)
+	{
+	//default teleservice ID assigned
+	tia637::TTeleserviceId	teleServiceId = tia637::KTeleserviceWMT;
+
+	iTestStep.INFO_PRINTF2(_L("Teleservice set is : %S"), &aTeleService);
+	if( aTeleService.Compare(KPtTeleScpt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceSCPT;
+		}
+	else if( aTeleService.Compare(KPtTeleCatpt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceCATPT;
+		}
+	else if( aTeleService.Compare(KPtTeleCmt91) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceCMT91;
+		}
+	else if( aTeleService.Compare(KPtTeleVmn) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceVMN;
+		}
+	else if( aTeleService.Compare(KPtTeleWap) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWAP;
+		}
+	else if( aTeleService.Compare(KPtTeleWemt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWEMT;
+		}
+	else if( aTeleService.Compare(KPtTeleWmt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWMT;
+		}
+	else if( aTeleService.Compare(KPtTeleWpt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWPT;
+		}
+	else
+		{
+		iTestStep.WARN_PRINTF1(_L("Invalid Teleservice provided. Default WMT used"));
+		}
+
+	return teleServiceId;
+	}
+
+/**
+ Gets the Message Conversion Id
+ @param aTeleService - TPtrC holding the tele service name
+ @return tia637::TTeleserviceId - teleservice id
+*/
+TSmsPIDConversion CTestMessCreateCdmaSmsUtil::GetMessageConversionId(const TDesC& aMessageConversion)
+	{
+	TSmsPIDConversion	smsPidConv = ESmsConvPIDNone;
+
+	iTestStep.INFO_PRINTF2(_L("The message conversion set is  : %S"), &aMessageConversion);
+	if( aMessageConversion.Compare(KPtPidFax) ==0)
+		{
+		smsPidConv = ESmsConvFax;
+		}
+	else if( aMessageConversion.Compare(KPtPidX400) ==0)
+		{
+		smsPidConv = ESmsConvX400;
+		}
+	else if( aMessageConversion.Compare(KPtPidPaging) ==0)
+		{
+		smsPidConv = ESmsConvPaging;
+		}
+	else if( aMessageConversion.Compare(KPtPidMail) ==0)
+		{
+		smsPidConv = ESmsConvMail;
+		}
+	else if( aMessageConversion.Compare(KPtPidErmes) ==0)
+		{
+		smsPidConv = ESmsConvErmes;
+		}
+	else if( aMessageConversion.Compare(KPtPidSpeech) ==0)
+		{
+		smsPidConv = ESmsConvSpeech;
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF1(_L("The message conversion provided is invalid"));
+		iTestStep.INFO_PRINTF1(_L("The default NONE message conversion is set"));
+		}
+	
+	return smsPidConv;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessCreateGsmSmsUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,259 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 creates the Gsm sms header and service settings. It fills up the
+// fields using data read from the ini file
+ 
+
+#include "TestMessCreateGsmSmsUtil.h"
+
+/** 
+ Constructor
+*/
+CTestMessCreateGsmSmsUtil::CTestMessCreateGsmSmsUtil(CTestMessBase &aTestStep)
+: 	CTestMessCreateSmsUtilBase(aTestStep)
+	{
+	aTestStep.INFO_PRINTF1(_L("The GSM SMS util is created"));
+	}
+
+/**
+ Prepares the SMS account details for CSendAs/RSendAs
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+void CTestMessCreateGsmSmsUtil::PrepareAccountL(CMsvSession& /*aSession*/)
+	{
+	}
+
+/**
+ Creates the header object for the GSM sms message
+ @param aBodyText - body text of the message
+ @return CSmsHeader* - pointer to CSmsHeader
+ @leave - KErrNoMemory
+ @leave - system wide error codes
+*/
+CSmsHeader* CTestMessCreateGsmSmsUtil::NewHeaderL(CRichText &aBodyText)
+	{
+	return CSmsHeader::NewL(CSmsPDU::ESmsSubmit, aBodyText);
+	}
+
+/**
+ Fills up the header object with the data read from the ini file.
+ @param aSmsHeader - sms header object ofthe sms message
+ @leave - system wide error codes
+*/
+void CTestMessCreateGsmSmsUtil::PrepareHeaderL(CSmsHeader &aSmsHeader)
+	{
+	//	Get bearer data
+	TPtrC	ptrBearer;
+	TBool	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KBearer, ptrBearer);
+	if ( !returnValue )
+		{
+		//If bearer is not provided, read from the default section of the ini file
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefBearer, ptrBearer);
+		}
+
+	if ( returnValue )
+		{
+		//default value for Bio message ID type
+		TBioMsgIdType	bearer = EBioMsgIdNbs;
+
+		iTestStep.INFO_PRINTF2(_L("Bearer = %S"), &ptrBearer);
+		if (ptrBearer.CompareF(KBearerWap) == 0)
+			{
+			//Set Wap message ID
+			bearer = EBioMsgIdWap;
+			}
+		else if (ptrBearer.CompareF(KBearerWapSecure) == 0)
+			{
+			//Set WapSecure message ID
+			bearer = EBioMsgIdWapSecure;
+			}
+		else
+			{
+			iTestStep.INFO_PRINTF1(_L("No supported bearer is provided. Default is used"));
+			}
+
+		//Set the Bio message ID type.
+#if (defined CDMA_API_ENABLED)
+		aSmsHeader.BioMessage().SetBioMsgIdType(bearer);
+#else
+		aSmsHeader.SetBioMsgIdType(bearer);
+#endif
+		}
+
+	//	Get encoding data
+	TInt	encoding;
+	returnValue=iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KEncoding, encoding);
+	if ( !returnValue )
+		{
+		//If encoding is not provied, read it from the default section of the ini file
+		returnValue=iTestStep.GetIntFromConfig(KDef, KDefEncoding, encoding);
+		}
+	if ( returnValue )
+		{
+		iTestStep.INFO_PRINTF2(_L("Encoding = %d"), encoding);
+#if (defined CDMA_API_ENABLED)
+		TSmsCharacterEncoding	charEncoding;
+
+		switch (encoding)
+			{
+		case 7:
+			//7 bit encoding format
+			charEncoding = KSmsEncoding7BitGsm;
+			break;
+		case 8:
+			//8 bit encoding format
+			charEncoding = KSmsEncodingBinary;
+			break;
+		case 16:
+			//Unicode encoding format
+			charEncoding = KSmsEncodingUnicode;
+			break;
+		default:
+			//default encoding format
+			charEncoding = KSmsEncoding7BitGsm;
+			break;
+			}
+
+		//Set the character encoding
+		aSmsHeader.BioMessage().SetEncoding(charEncoding);
+#else
+		TSmsDataCodingScheme::TSmsAlphabet	alpha = TSmsDataCodingScheme::ESmsAlphabet7Bit;
+
+		switch (encoding)
+			{
+		case 7:
+			alpha = TSmsDataCodingScheme::ESmsAlphabet7Bit;
+			break;
+		case 8:
+			alpha = TSmsDataCodingScheme::ESmsAlphabet8Bit;
+			break;
+		case 16:
+			alpha = TSmsDataCodingScheme::ESmsAlphabetUCS2;
+			break;
+		default:
+			alpha = TSmsDataCodingScheme::ESmsAlphabet7Bit;
+			break;
+			}
+
+		CSmsPDU&	pdu=aSmsHeader.Message().SmsPDU();
+		if ( pdu.DataCodingSchemePresent() )
+			{
+			pdu.SetAlphabet(alpha);
+			}
+#endif
+		}
+
+	//	Get delivery report data
+	TPtrC	ptrDeliveryReport;
+	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KDeliveryReport, ptrDeliveryReport);
+	if ( !returnValue )
+		{
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefDeliveryReport, ptrDeliveryReport);
+		}
+	if ( returnValue )
+		{
+		TBool	changeDR = EFalse;
+		TBool	deliveryReport = EFalse;
+
+		iTestStep.INFO_PRINTF2(_L("Delivery Report = %S"), &ptrDeliveryReport);
+		if (ptrDeliveryReport.CompareF(_L("NO")) == 0)
+			{
+			changeDR = ETrue;
+			deliveryReport = EFalse;
+			}
+		else if (ptrDeliveryReport.CompareF(_L("YES")) == 0)
+			{
+			changeDR = ETrue;
+			deliveryReport = ETrue;
+			}
+
+		if ( changeDR )
+			{
+#if (defined CDMA_API_ENABLED)
+			aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeDelivery, deliveryReport);
+#else
+			switch ( aSmsHeader.Type() )
+				{
+			case CSmsPDU::ESmsSubmit:
+				aSmsHeader.Submit().SetStatusReportRequest(deliveryReport);
+				break;
+			case CSmsPDU::ESmsCommand:
+				aSmsHeader.Command().SetStatusReportRequest(deliveryReport);
+				break;
+			default:
+				User::Leave(KErrNotSupported);
+				}
+#endif
+			}
+		}
+	}
+/**
+ Sets the fields for the sms account settings using data read from the ini file
+ If no data is given in ini file, the default settings in the account is used.
+ @param aSmsSettings - CSmsSettings reference
+*/
+void CTestMessCreateGsmSmsUtil::SetSmsAccountSettings(CSmsSettings &aSmsSettings)
+	{
+	iTestStep.INFO_PRINTF1(_L("Set SMS account Settings...."));
+	TBool	boolTemp;
+
+	//	Set the Reply quoted setting.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KReplyQuoted, boolTemp) )
+		{
+		aSmsSettings.SetReplyQuoted(boolTemp);
+		}
+
+	//	Set the Reject duplicate settings.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KRejectDuplicate, boolTemp) )
+		{
+#if (defined CDMA_API_ENABLED)
+		aSmsSettings.MessageSettings().Gsm().SetRejectDuplicate(boolTemp);
+#else
+		aSmsSettings.SetRejectDuplicate(boolTemp);
+#endif
+		}
+
+	//	Set the option for delivery report.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KDeliveryReport, boolTemp) )
+		{
+		aSmsSettings.SetDeliveryReport(boolTemp);
+		}
+
+	//	Set the concatenate feature
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KConCatenate, boolTemp) )
+		{
+#if (defined CDMA_API_ENABLED)
+		aSmsSettings.MessageSettings().Gsm().SetCanConcatenate(boolTemp);
+#else
+		aSmsSettings.SetCanConcatenate(boolTemp);
+#endif
+		}
+
+	//	Set whether to use the same path while replying.
+	if(iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KReplyPath, boolTemp))
+		{
+#if (defined CDMA_API_ENABLED)
+		aSmsSettings.MessageSettings().Gsm().SetReplyPath(boolTemp);
+#else
+		aSmsSettings.SetReplyPath(boolTemp);
+#endif
+		}
+
+	//can implement these features later...
+	aSmsSettings.SetValidityPeriod(ESmsVPWeek);	// week 
+	aSmsSettings.SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger); //relative
+	aSmsSettings.SetDelivery(ESmsDeliveryImmediately);
+	aSmsSettings.SetMessageConversion(ESmsConvPIDNone);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessCreateSMS.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,416 @@
+// 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"
+// which accompanies 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 contains CTestMessCreateSMS. This class creates the sms message
+// for GSM or CDMA. For CDMA mtm, it uses utility classes to create
+// the respective GSM or CDMA sms message
+// 
+//
+
+
+#include "TestMessCreateSMS.h"
+#include "TestMessEditEntryUtil.h"
+
+//Usage of macros of Cdma mtm
+#include "TestMessCreateGsmSmsUtil.h"
+#if (defined CDMA_API_ENABLED)
+#include "TestMessCreateCdmaSmsUtil.h"
+#endif
+
+// EPOC includes
+#include <mtmuids.h>
+#include <txtrich.h>
+#include <smut.h>
+#include <etelmm.h>
+#include <smutset.h> //For CSmsMessageSettings
+
+/*@{*/
+// Literal constants read from the ini file
+_LIT(KRecipients,			"recipients");
+_LIT(KTo,					"to%d");
+_LIT(KPtSaveDraft,			"SaveInDraft");
+_LIT(KDefTo,				"smsto");
+
+_LIT(KPtMsgBearerGsm,		"GSM");
+//Usage of macros for Cdma mtm
+#if (defined CDMA_API_ENABLED)
+_LIT(KPtMsgBearerType,		"MessageBearerType");
+_LIT(KPtMsgBearerCdma,		"CDMA");
+#endif
+/*@}*/
+
+#if (defined CDMA_API_ENABLED)
+#define KPtDefaultCount		1
+#endif
+
+CTestMessCreateSMS::CTestMessCreateSMS()
+:	CTestMessBase(EFalse)
+,	iSimInDatabase(EFalse)
+	{
+	SetTestStepName(_L("CreateSms"));
+	}
+
+/**
+ Creates the SMS message for GSM or CDMA.
+ @return TVerdict
+*/
+
+TVerdict CTestMessCreateSMS::doTestStepPreambleL()
+	{
+	TVerdict	ret=CTestMessBase::doTestStepPreambleL();
+	// IMK iSimInDatabase=(GetPhoneSmsNumberL(iSimPhoneNumber)==KErrNone);
+	iSimInDatabase=false; //IMK (GetPhoneSmsNumberL(iSimPhoneNumber)==KErrNone);
+	return ret;
+	}
+
+/**
+ Creates the SMS message for GSM or CDMA.
+ @return TVerdict
+*/
+TVerdict CTestMessCreateSMS::doTestStepL()
+	{
+	//	Get scheduling data
+	TTimeIntervalMinutes	scheduledTime=ReadScheduleTime();
+
+	//create the message
+	TBool					saveDraft = EFalse;
+	GetBoolFromConfig(ConfigSection(), KPtSaveDraft, saveDraft);
+
+	if ( saveDraft )
+		{
+		//Create the message in Draft
+		CreateSmsL(KMsvDraftEntryId, scheduledTime);
+		}
+	else
+		{
+		//Creates the message in Outbox
+		CreateSmsL(KMsvGlobalOutBoxIndexEntryId, scheduledTime);
+		}
+
+	return TestStepResult();
+	}
+
+void CTestMessCreateSMS::CreateSmsL(const TMsvId aMsvId, TTimeIntervalMinutes aScheduledTime)
+	{
+	//	Get the bearertype (CDMA/GSM)
+	TPtrC	messageBearerType;
+	messageBearerType.Set(KPtMsgBearerGsm);
+#if (defined CDMA_API_ENABLED)
+	GetStringFromConfig(ConfigSection(), KPtMsgBearerType, messageBearerType);
+	INFO_PRINTF2(_L("The message bearertype is : %S"), &messageBearerType);
+#endif
+
+	CTestMessCreateSmsUtilBase*	createSmsUtil = NULL;
+	//	Create the repective util class
+	if ( messageBearerType.Compare(KPtMsgBearerGsm)==0 )
+		{
+		createSmsUtil=new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+		}
+#if (defined CDMA_API_ENABLED)
+	else if ( messageBearerType.Compare(KPtMsgBearerCdma)==0 )
+		{
+		createSmsUtil=new (ELeave) CTestMessCreateCdmaSmsUtil(*this);
+		}
+#endif
+	else
+		{
+		WARN_PRINTF1(_L("Unknown bearer type using Gsm"));
+		createSmsUtil=new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+		}
+	CleanupStack::PushL(createSmsUtil);
+
+//	All references to PrepareAccountL can be removed when DEF054045 is fixed
+//	createSmsUtil->PrepareAccountL(*iSession);
+
+	if(!iBodyAvailable)
+       {
+		ERR_PRINTF1(_L("No Body"));
+		SetTestStepResult(EFail);
+	   }
+
+	if ( TestStepResult()==EPass )
+		{
+		TInt	err=KErrNone;
+		RSendAs			sendAsServer;
+		User::LeaveIfError(sendAsServer.Connect());
+		CleanupClosePushL(sendAsServer);
+		AddMtmCapabilitiesL(sendAsServer);
+
+		RSendAsMessage	sendAs;
+		TRAP(err, sendAs.CreateL(sendAsServer, KUidMsgTypeSMS));
+		PrepareSendAsL(sendAs);
+
+		if ( err!=KErrNone )
+			{
+			SetTestStepError(err);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("sendAs.SetBodyTextL"));
+			sendAs.SetBodyTextL(*iBodyText);
+
+#if (!defined CDMA_API_ENABLED)
+			TInt	recipients=1;
+			GetIntFromConfig(ConfigSection(), KRecipients, recipients);
+
+			TPtrC	to(iSimPhoneNumber.iTelNumber);
+			TBool	returnValue=ETrue;
+			for ( TInt recipient=0; (recipient<recipients) && (TestStepResult()==EPass); )
+				{
+				++recipient;
+
+				if ( iSimInDatabase )
+					{
+					returnValue=ETrue;
+					}
+				else
+					{
+					TBuf<KMaxTestExecuteCommandLength>	tempStore;
+					tempStore.Format(KTo(), recipient);
+					returnValue=GetStringFromConfig(ConfigSection(), tempStore, to);
+					if ( !returnValue )
+						{
+						returnValue=GetStringFromConfig(KDef, KDefTo, to);
+						}
+					}
+				if ( !returnValue )
+					{
+					ERR_PRINTF1(_L("No To"));
+					SetTestStepResult(EFail);
+					}
+				else
+					{
+					INFO_PRINTF2(_L("To = %S"), &to);
+					sendAs.AddRecipientL(to, RSendAsMessage::ESendAsRecipientTo);
+					}
+				}
+#endif
+
+			TRAP(err, sendAs.SaveMessageAndCloseL());
+			if ( err!=KErrNone )
+				{
+				ERR_PRINTF1(_L("Save Message Failiure"));
+				SetTestStepResult(EFail);
+				sendAs.Close();
+				}
+			else
+				{
+				TMsvId				messageId=KMsvNullIndexEntryId;
+				CMsvEntry*			parent=iSession->GetEntryL(KMsvDraftEntryIdValue);
+				CleanupStack::PushL(parent);
+				parent->SetSortTypeL(SelectionOrdering());
+				CMsvEntrySelection*	selection=parent->ChildrenL();
+				CleanupStack::PushL(selection);
+
+				if ( selection->Count()>0 )
+					{
+					messageId=selection->At(0);
+					}
+				if ( messageId!=KMsvNullIndexEntryId )
+					{
+					SetEntryL(messageId);
+					TMsvEntry	child=EntryL().Entry();
+
+					//Get the message header
+					CSmsHeader*	smsHeader = createSmsUtil->NewHeaderL(*iBodyText);
+					CleanupStack::PushL(smsHeader);
+
+					//If message is too big lets concatenate.....
+					ConCatMessageTextL(*smsHeader);
+
+					CMsvStore*	store =NULL;
+					TRAPD(error, store = EntryL().EditStoreL());
+					if(error != KErrNone)
+						{
+						ERR_PRINTF2(_L("Edit Store Failed. Error %d"), error);
+						SetTestStepError(error);
+						}
+					else
+						{
+						CleanupStack::PushL(store);
+						smsHeader->RestoreL(*store);
+#if (defined CDMA_API_ENABLED)
+						//Adding the recipients...
+						CArrayPtrFlat<CSmsNumber>& recips = smsHeader->Recipients();
+
+						TInt	recipients=KPtDefaultCount;
+						GetIntFromConfig(ConfigSection(), KRecipients, recipients);
+
+						TBool	returnValue;
+						for ( TInt recipient=1; recipient<=recipients; recipient++)
+							{
+							TBuf<KMaxTestExecuteCommandLength>	tempStore;	
+
+							tempStore.Format(KTo(), recipient);	
+
+							TPtrC	to;
+							returnValue=GetStringFromConfig(ConfigSection(), tempStore, to);
+							if ( !returnValue )
+								{
+								returnValue=GetStringFromConfig(KDef, KDefTo, to);
+								}
+							if ( !returnValue )
+								{
+								ERR_PRINTF1(_L("No To"));
+								SetTestStepResult(EFail);
+								}
+							else
+								{
+								INFO_PRINTF2(_L("To = %S"), &to);
+
+								//Get the recipient array
+								CSmsNumber* newRecip = CSmsNumber::NewL();
+								CleanupStack::PushL(newRecip);
+
+								// Check for the email address in recipient
+								// This is for email over sms feature
+								if(to.Locate('@') != KErrNotFound)
+									{
+									newRecip->SetAddressL(to, EMsvAddressTypeEMail);
+									}
+								else
+									{
+									newRecip->SetAddressL(to, EMsvAddressTypeISDN);
+									}
+
+								//Append the recipients
+								recips.AppendL(newRecip);
+								CleanupStack::Pop(newRecip);
+								}
+							}
+#endif
+						child.SetSendingState(KMsvSendStateSuspended);
+						child.SetInPreparation(EFalse);
+						child.SetVisible(ETrue);
+
+						//Get the details
+						TBuf<KSmsDetailsLength>	details;
+
+//Usage of macros of Cdma mtm
+#if (!defined CDMA_API_ENABLED)
+						if ( TSmsUtilities::GetDetails(EntryL().Session().FileSession(), smsHeader->Message(), details) == KErrNone )
+							{
+							child.iDetails.Set(details);
+							}
+#else
+						//if ( TSmsUtilities::GetDetails(EntryL().Session().FileSession(), smsHeader->Message(), details) == KErrNone )
+						CArrayPtrFlat<CSmsNumber>& smsNumberArray = smsHeader->Recipients();
+						if ( smsNumberArray.Count() )
+							{
+							details.Copy(smsNumberArray[0]->Address());
+							}
+						if ( details.Length() )
+							{
+							child.iDetails.Set(details);
+							}
+#endif
+
+						//Get the description
+						TBuf<KSmsDescriptionLength>	desc;
+						if ( TSmsUtilities::GetDescription(smsHeader->Message(), desc) == KErrNone )
+							{
+							child.iDescription.Set(desc);
+							}
+
+						//fill up the fields of the message header
+						PrepareHeaderL(*createSmsUtil, *smsHeader);
+
+						//set the scheduled time if any
+						if ( aScheduledTime!=TTimeIntervalMinutes(0) )
+							{
+							child.SetSendingState(KMsvSendStateScheduled);
+							child.SetScheduled(ETrue);
+							child.iDate.UniversalTime();
+							child.iDate+=aScheduledTime;
+							}
+
+						//	Update entry with data set from .ini file
+						EntryL().ChangeL(child);
+						smsHeader->StoreL(*store);
+						store->CommitL();
+						CleanupStack::PopAndDestroy(store);
+
+						CTestMessEditEntryUtil*	editUtil=new (ELeave) CTestMessEditEntryUtil(*this, ETrue, iSimInDatabase, iSimPhoneNumber);
+						CleanupStack::PushL(editUtil);
+						editUtil->ProcessEntryL(EntryL().EntryId());
+						CleanupStack::PopAndDestroy(editUtil);
+
+						if ( aMsvId==KMsvGlobalOutBoxIndexEntryId )
+							{
+							// Move the selected message to out box
+							CTestActive*	active=CTestActive::NewLC(*this);
+							CMsvOperation*	op=parent->MoveL(child.Id(), KMsvGlobalOutBoxIndexEntryIdValue, active->iStatus);
+							CleanupStack::PushL(op);
+							active->Activate();
+							CActiveScheduler::Start();
+							CleanupStack::PopAndDestroy(2, active);
+							}
+						}
+					CleanupStack::PopAndDestroy(smsHeader);
+					}
+				CleanupStack::PopAndDestroy(2, parent);
+				}
+			}
+
+		CleanupStack::PopAndDestroy(&sendAsServer);
+		}
+	CleanupStack::PopAndDestroy(createSmsUtil);
+	}
+
+void CTestMessCreateSMS::AddMtmCapabilitiesL(RSendAs& aSendAs)
+	{
+	aSendAs.ResetMessageFilter();
+	}
+
+void CTestMessCreateSMS::PrepareSendAsL(RSendAsMessage& /*aSendAs*/)
+	{
+	}
+
+void CTestMessCreateSMS::PrepareHeaderL(CTestMessCreateSmsUtilBase& aCreateUtil, CSmsHeader& aSmsHeader)
+	{
+	aCreateUtil.PrepareHeaderL(aSmsHeader);
+	}
+
+//Usage of macro for CDMA mtm
+#if (defined CDMA_API_ENABLED)
+void CTestMessCreateSMS::ConCatMessageTextL(CSmsHeader& /*aHeader*/)
+	{
+	}
+#else
+void CTestMessCreateSMS::ConCatMessageTextL(CSmsHeader& aHeader)
+	//Doxygen compatible comments
+	/**
+		This method Concatenates the long message. Checks for the length of 
+		body, if it is greater than 160 characters sets the concatenation 
+		option on for the Sms.
+
+		@param aHeader
+		Header for which the concatenation option is set on... 
+
+	*/
+	{
+	CSmsSettings*	smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	//if the length of the iBodyText is greater than the sms maximum length
+	//i.e 160 chars...Set the Concatenation On....
+	if( aHeader.Message().MessageLengthL() > aHeader.Message().MaxMessageLength() )
+		{
+		INFO_PRINTF1(_L("Concatenate Message..."));
+		INFO_PRINTF1(_L("Message Exceeds max length setting Concatenate On..."));
+		aHeader.GetSmsSettingsL(*smsSettings);
+		smsSettings->SetCanConcatenate(ETrue);
+		aHeader.SetSmsSettingsL(*smsSettings);
+		}
+	CleanupStack::PopAndDestroy(smsSettings);
+	}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessCreateSMSaccount.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,151 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestMessCreateSmsAccount which creates an SMS
+// account folder for GSM or CDMA
+
+#include "TestMessCreateSmsAccount.h"
+#include "TestMess.h"
+ 
+// EPOC includes
+#include <msvids.h>
+#include <miutset.h>
+#include <msvstore.h>
+
+#include "TestMessCreateGsmSmsUtil.h"
+//Usage of Macro for CDMA mtm
+#if (defined CDMA_API_ENABLED)
+#include "TestMessCreateCdmaSmsUtil.h"
+#endif
+
+#include <csmsaccount.h>
+#include <MsvScheduleSettings.h>
+#include <MsvOffPeakTime.h>
+#include <MsvSendErrorAction.h>
+#include <MsvSysAgentAction.h>
+
+/*@{*/
+_LIT(KSCName,				"scname");
+_LIT(KSCNumber,				"scnumber");
+
+_LIT(KPtGSM,				"GSM");
+#if (defined CDMA_API_ENABLED)
+_LIT(KPtMessageBearerType,	"MessageBearerType");
+_LIT(KPtCDMA,				"CDMA");		
+#endif
+/*@}*/
+
+CTestMessCreateSmsAccount::CTestMessCreateSmsAccount()
+:	CTestMessBase(EFalse)
+	{
+	SetTestStepName(_L("CreateSmsAccount"));
+	}
+
+/**
+ Creates the SMS account folder for GSM or CDMA. For CDMA mtm,
+ it creates the respective utility class for creating the account
+ @return TVerdict
+*/
+TVerdict CTestMessCreateSmsAccount::doTestStepL()
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Create SMS account"));
+
+	TPtrC	ptrSCName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KSCName, ptrSCName);
+	INFO_PRINTF2(_L("SC Name = %S"), &ptrSCName);
+
+	TPtrC	ptrSCNumber;
+	returnValue =GetStringFromConfig(ConfigSection(), KSCNumber, ptrSCNumber);
+	INFO_PRINTF2(_L("SC Number = %S"), &ptrSCNumber);
+
+	CSmsAccount*			smsAccount = CSmsAccount::NewLC();
+	CMsvScheduleSettings*	scheduleSetting = CMsvScheduleSettings::NewLC();
+	CMsvOffPeakTimes*		offPeakTimes=new (ELeave) CMsvOffPeakTimes();
+	CleanupStack::PushL(offPeakTimes);
+	CMsvSendErrorActions*	errorActions=CMsvSendErrorActions::NewLC();
+	CMsvSysAgentActions*	sysAgentActions=new (ELeave) CMsvSysAgentActions();
+	CleanupStack::PushL(sysAgentActions);
+	CSmsSettings*		smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	SetEntryL(KMsvRootIndexEntryId);
+
+	EntryL().SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=EntryL().ChildrenWithTypeL(KUidMsvServiceEntry);
+	CleanupStack::PushL(selection);
+	TInt				count=selection->Count();
+	TBool				found=EFalse;
+	for (TInt i=count; i>0 && !found; )
+		{
+		SetEntryL(selection->At(--i));
+
+		// Only one Sms Service allowed
+		if	(	EntryL().Entry().iMtm == KUidMsgTypeSMS &&
+				EntryL().Entry().iType == KUidMsvServiceEntry
+			)
+			{
+			found=ETrue;
+			}
+		}
+
+	if ( !found )
+		{
+		smsAccount->InitialiseDefaultSettingsL(*smsSettings);
+		smsAccount->InitialiseDefaultSettingsL(*scheduleSetting, *offPeakTimes, *errorActions, *sysAgentActions);
+
+		TPtrC	messageBearerType;
+		messageBearerType.Set(KPtGSM);
+#if (defined CDMA_API_ENABLED)
+		GetStringFromConfig(ConfigSection(), KPtMessageBearerType, messageBearerType);
+		INFO_PRINTF2(_L("The message bearer type is : %S"), &messageBearerType);
+#endif
+
+		CTestMessCreateSmsUtilBase*	createSmsUtil = NULL;
+		//Creates the util class for GSM or CDMA
+		if ( messageBearerType.Compare(KPtGSM)==0 )
+			{
+			createSmsUtil = new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+			}
+#if (defined CDMA_API_ENABLED)
+		else if( messageBearerType.Compare(KPtCDMA)==0 )
+			{
+			createSmsUtil = new (ELeave) CTestMessCreateCdmaSmsUtil(*this);
+			}
+#endif
+		else
+			{
+			WARN_PRINTF1(_L("Unknown bearer type using Gsm"));
+			createSmsUtil= new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+			}
+		CleanupStack::PushL(createSmsUtil);
+
+		//Changes the new account settings
+		createSmsUtil->SetSmsAccountSettings(*smsSettings);
+		CleanupStack::PopAndDestroy(createSmsUtil);
+
+		smsAccount->SaveSettingsL(*smsSettings);
+		smsAccount->SaveSettingsL(*scheduleSetting, *offPeakTimes, *errorActions, *sysAgentActions);
+		}
+
+	if ( TestStepResult()==EPass )
+		{
+		smsAccount->LoadSettingsL(*smsSettings);
+		smsSettings->AddServiceCenterL(ptrSCName, ptrSCNumber);
+		smsAccount->SaveSettingsL(*smsSettings);
+		}
+
+	CleanupStack::PopAndDestroy(2, smsSettings);
+	CleanupStack::PopAndDestroy(5, smsAccount);
+
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessCreateSmsUtilBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,27 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 is the base class for create CDMA or GSM SMS utility class
+// 
+//
+
+
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ Constructor
+*/
+CTestMessCreateSmsUtilBase::CTestMessCreateSmsUtilBase(CTestMessBase &aTestStep)
+: iTestStep(aTestStep)
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessEditEntry.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,170 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntry which edits the entry characterstics
+// 
+//
+ 
+#include "TestMessEditEntry.h"
+#include "TestMessEditEntryUtil.h"
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+_LIT(KPtSaveToOutbox,			"SaveToOutbox");
+/*@}*/
+
+// Default value for depth of the count
+#define KDefaultDepthCount	1
+
+/**
+ * Override of base class pure virtual
+ * @param  None
+ * @return TVerdict - return TVerdict codes
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntry::ProcessMessageL(CBaseMtm& /*aBaseMtm*/, TMsvId /*aMsgId*/)
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Edit Entry"));
+
+	if ( TestStepResult() == EPass )
+		{
+		CTestMessEditEntryUtil*	editUtil=new (ELeave) CTestMessEditEntryUtil(*this, EFalse, EFalse, RMobilePhone::TMobileAddress());
+		CleanupStack::PushL(editUtil);
+
+		editUtil->ProcessEntryL(EntryL().EntryId());
+
+		//Read whether the message is saved in outbox
+		TBool saveOutbox;
+		if( ! GetBoolFromConfig(ConfigSection(), KPtSaveToOutbox, saveOutbox))
+			{
+			saveOutbox = EFalse;
+			}
+
+		INFO_PRINTF2(_L("The message saved in outbox flag is : %S"), &saveOutbox);
+		if(saveOutbox)
+			{
+			//Move the message to outbox
+			MoveMessageL(EntryL().EntryId(), KMsvGlobalOutBoxIndexEntryId);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Entry is not moved"));
+			}
+
+		CleanupStack::PopAndDestroy(editUtil);
+		}
+	}
+
+/**
+ Move the message the destination folder
+ @param aMessageId - TMsvId of the message
+ @param aFolderId - TMsvId of the destination folder
+ @leave KErrNoMemory
+ @leave KErrNotFound
+*/
+void CTestMessEditEntry::MoveMessageL(TMsvId aMessageId,TMsvId aFolderId)
+	{
+	// Get CMsvEntry object and the TMsvEntry of the message
+	CMsvEntry*		msgvEntry = iSession->GetEntryL(aMessageId);
+	CleanupStack::PushL(msgvEntry);
+	TMsvEntry entry= msgvEntry->Entry();
+
+	// Get the parent folder Id of the messaage and create the CMsvEntry
+	TMsvId			parentId = entry.Parent();
+	CMsvEntry*		msvEntry = iSession->GetEntryL(parentId);
+	CleanupStack::PushL(msvEntry);
+
+	// Create the active object for handling asynchronous request
+	CMoveOperation*	activeOperation = CMoveOperation::NewL();
+	CleanupStack::PushL(activeOperation);
+
+	// Move the selected message to given target folder
+	CMsvOperation*	op = msvEntry->MoveL(aMessageId, aFolderId, activeOperation->iStatus);
+	CleanupStack::PushL(op);
+
+	// Start the Active scheduler 
+	activeOperation->SetOperation();
+	CActiveScheduler::Start();
+	TInt	error = activeOperation->iStatus.Int();
+	if(error == KErrNone)
+		{
+		INFO_PRINTF1(_L("message moved successfully"));
+		}
+	else
+		{
+		INFO_PRINTF2(_L("message failed to be moved. Error : %d"),error);
+		SetTestStepResult(EFail);
+		}
+		//Destroy the object
+	CleanupStack::PopAndDestroy(4, msgvEntry);
+	}
+
+/**
+ Constructor for CMoveOperation 
+*/
+CTestMessEditEntry::CMoveOperation::CMoveOperation()
+: CActive(CActive::EPriorityStandard)
+	{
+	}
+
+/**
+ Two phase constructor
+ @return CTestMessEditEntry::CMoveOperation* - pointer of CTestMessEditEntry::CMoveOperation
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+CTestMessEditEntry::CMoveOperation* CTestMessEditEntry::CMoveOperation::NewL()
+	{
+	CMoveOperation* self = new (ELeave) CMoveOperation();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/**
+ Second phase construction
+ @leave - sytem wide error codes
+*/
+void CTestMessEditEntry::CMoveOperation::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+/**
+ Sets the operation as active
+*/
+void CTestMessEditEntry::CMoveOperation::SetOperation()
+	{
+	SetActive();
+	}
+
+/**
+ Operation completed event handler.
+*/
+void CTestMessEditEntry::CMoveOperation::RunL()
+	{
+	CActiveScheduler::Stop();
+	}
+
+/**
+ Cancels the active operation
+*/
+void CTestMessEditEntry::CMoveOperation::DoCancel()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessEditEntryUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,249 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+// 
+//
+
+
+#include "TestMessEditEntryUtil.h"
+
+// EPOC includes
+
+#include <smut.h>
+#include <miutmsg.h>
+#include <mtclreg.h>
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+_LIT(KToRecipients,			"toRecipients");
+_LIT(KTo,					"to%d");
+_LIT(KDef,					"default");
+_LIT(KDefTo,				"emailto");
+
+// Literal constants used
+_LIT(KCharacterSetType,		"characterSetType");
+_LIT(KPtEditBody,			"EditBody");
+_LIT(KPtEditRecipients,		"EditRecipients");
+_LIT(KPtRecipient,			"recipient%d");
+/*@}*/
+
+CTestMessEditEntryUtil::CTestMessEditEntryUtil(CTestMessBase& aTestStep, TBool aSimChecked, TBool aSimInDatabase, RMobilePhone::TMobileAddress aSimPhoneNumber)
+:	CTestMessStoreProcessUtil(aTestStep, EFalse)
+,	iSimChecked(aSimChecked)
+,	iSimInDatabase(aSimInDatabase)
+,	iSimPhoneNumber(aSimPhoneNumber)
+	{
+	}
+
+/**
+ * Edits the ImHeaders of the Entry
+ * @param  CImHeader& aHeader - Im Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntryUtil::ProcessImHeaderL(CImHeader& aHeader)
+	{
+	// Edit the CImHeader information
+	TInt	recipients;
+	if ( !iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KToRecipients, recipients) )
+		{
+		recipients=0;
+		}
+
+	for ( TInt recipient=1; recipient<=recipients; recipient++)
+		{
+		TBuf<KMaxTestExecuteCommandLength>	tempStore;
+		tempStore.Format(KTo(), recipient);
+
+		TPtrC	to;
+		TInt	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), tempStore, to);
+		if ( !returnValue )
+			{
+			returnValue=iTestStep.GetStringFromConfig(KDef, KDefTo, to);
+			}
+		if ( !returnValue )
+			{
+			iTestStep.ERR_PRINTF1(_L("No To"));
+			iTestStep.SetTestStepResult(EFail);
+			}
+		else
+			{
+			iTestStep.INFO_PRINTF2(_L("To = %S"), &to);
+			aHeader.ToRecipients().AppendL(to);
+			}
+		}
+	}
+
+/**
+ * Edits the ImMimeHeaders of the message entry
+ * @param  CImMimeHeader& aHeader - Mime Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntryUtil::ProcessImMimeHeaderL(CImMimeHeader& aHeader)
+	{
+	// Update the character set info
+	TPtrC	charSetType;
+	if ( iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KCharacterSetType, charSetType) )
+		{
+		TUint	charSetVal;
+		if ( ValidCharacterSetInfo(charSetType, charSetVal) )
+			{
+			aHeader.SetMimeCharset(charSetVal);
+			}
+		}
+	}
+
+/**
+ * Edits the ImIAPPreferences of the entry
+ * @param  CImIAPPreferences& aPreferences - IAP Preferences to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntryUtil::ProcessInternetAccessPreferencesL(CImIAPPreferences& /*aPreferences*/)
+	{
+	}
+
+/**
+ Edits the CSmsHeader of the entry
+ @param  CSmsHeader& aHeader - Sms Header to edit
+ @return None
+ @panic None
+ @leave KErrNoMemory
+*/
+void CTestMessEditEntryUtil::ProcessSmsHeaderStreamL(CSmsHeader& aSmsHeader)
+	{
+	// Get the number of recipients 
+	TInt	recipients = 0;
+	if ( !iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KPtEditRecipients, recipients) )
+		{
+		recipients=0;
+		iTestStep.INFO_PRINTF1(_L("No Recipients edited/added"));
+		}
+	iTestStep.INFO_PRINTF2(_L("The number of recipients : %d"), recipients);
+
+	if ( !iSimChecked )
+		{
+		//IMK iSimInDatabase=(iTestStep.GetPhoneSmsNumberL(iSimPhoneNumber)==KErrNone);
+		iSimInDatabase=0;
+		}
+	TPtrC	to(iSimPhoneNumber.iTelNumber);
+	TInt	returnValue=ETrue;
+	for ( TInt recipient=0; (recipient<recipients) && (iTestStep.TestStepResult()==EPass); )
+		{
+		++recipient;
+		if ( iSimInDatabase )
+			{
+			returnValue=ETrue;
+			}
+		else
+			{
+			TBuf<KMaxTestExecuteCommandLength>	tempStore;
+			tempStore.Format(KPtRecipient(), recipient);
+
+			//Get the recipient address
+			returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), tempStore, to);
+			if ( !returnValue )
+				{
+				returnValue=iTestStep.GetStringFromConfig(KDef, KDefTo, to);
+				}
+			}
+		if ( !returnValue )
+			{
+			iTestStep.ERR_PRINTF1(_L("Recipient number is not Provided"));
+			iTestStep.SetTestStepResult(EFail);
+			}
+		else
+			{
+			//Append the recipient address in recipient list
+			CSmsNumber*	smsNumber = CSmsNumber::NewL();
+			CleanupStack::PushL(smsNumber);
+			iTestStep.INFO_PRINTF2(_L("To = %S"), &to);
+			smsNumber->SetAddressL(to);
+			aSmsHeader.Recipients().AppendL(smsNumber);
+			//No need to destory CSmsNumber. CSmsHeader destroys it
+			CleanupStack::Pop(smsNumber);
+			}
+		}
+	}
+
+
+/**
+ Edits the CRichText of the entry
+ @param  CRichText& aBodyText - Text to edit
+ @return None
+ @panic None
+ @leave KErrNoMemory
+*/
+void CTestMessEditEntryUtil::ProcessRichTextBodyL(CRichText& aBodyText)
+	{
+	TPtrC	ptrBody;
+	//Get the body text file
+	TBool	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KPtEditBody, ptrBody);
+	if ( !returnValue )
+		{
+		iTestStep.INFO_PRINTF1(_L("Body is not edited"));
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF2(_L("Body = %S"), &ptrBody);
+
+		// open the file
+		RFs rfs;
+		rfs.Connect();
+		RFile	file;
+
+		//Append the body text of the entry
+		TInt anError = file.Open(rfs, ptrBody, EFileShareAny);
+		if(anError == KErrNone)
+			{
+			TBool		reading=ETrue;
+			TInt		pos = aBodyText.LdDocumentLength();
+			TBuf8<1>	charIn;
+			while (reading)
+				{
+				file.Read(charIn, 1);
+				if(charIn.Length())
+					switch ( charIn[0] )
+						{
+					case '\r':
+						aBodyText.InsertL(pos++, CEditableText::ELineBreak);
+					case '\n':
+						break;
+					default:
+						aBodyText.InsertL(pos++, TChar(charIn[0]));
+						}
+				else
+					{
+					reading = FALSE;	// stop at the end of the file
+					}
+				}
+			file.Close();
+			rfs.Close();
+			}
+		else
+			{
+			iTestStep.ERR_PRINTF2(_L("Cannot open file = %S"), &ptrBody);
+			iTestStep.SetTestStepResult(EFail);
+			}
+		}	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessPrintEntryUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,115 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+//
+
+ 
+#include "TestMessPrintEntryUtil.h"
+
+CTestMessPrintEntryUtil::CTestMessPrintEntryUtil(CTestMessBase& aTestStep)
+:	CTestMessStoreProcessUtil(aTestStep, ETrue)
+	{
+	}
+
+/**
+ * Prints the ImHeaders of the Entry
+ * @param  CImHeader& aHeader - Im Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessImHeaderL(CImHeader& aHeader)
+	{
+	TPtrC	ptrTemp;
+
+	ptrTemp.Set(aHeader.From());
+	iTestStep.INFO_PRINTF2(_L("  From                         : %S"), &ptrTemp);
+	ptrTemp.Set(aHeader.ReceiptAddress());
+	iTestStep.INFO_PRINTF2(_L("  ReceiptAddress               : %S"), &ptrTemp);
+	ptrTemp.Set(aHeader.ReplyTo());
+	iTestStep.INFO_PRINTF2(_L("  ReplyTo                      : %S"), &ptrTemp);
+	ptrTemp.Set(aHeader.Subject());
+	iTestStep.INFO_PRINTF2(_L("  Subject                      : %S"), &ptrTemp);
+	}
+
+/**
+ * Prints the ImMimeHeaders of the message entry
+ * @param  CImMimeHeader& aHeader - Mime Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessImMimeHeaderL(CImMimeHeader& /*aHeader*/)
+	{
+	}
+
+/**
+ * Prints the ImIAPPreferences of the entry
+ * @param  CImIAPPreferences& aPreferences - IAP Preferences to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences)
+	{
+	TInt	prefs=aPreferences.NumberOfIAPs();
+	for ( TInt pref=0; pref<prefs; )
+		{
+		TImIAPChoice	choice=aPreferences.IAPPreference(pref++);
+		iTestStep.INFO_PRINTF2(_L("  IAP Preference               : %d"), pref);
+		iTestStep.INFO_PRINTF2(_L("  iIAP                         : %d"), choice.iIAP);
+		iTestStep.INFO_PRINTF2(_L("  iDialogPref                  : %d"), choice.iDialogPref);
+		}
+	}
+
+/**
+ * Prints the CSmsHeader of the entry
+ * @param  CSmsHeader& aHeader - Sms Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessSmsHeaderStreamL(CSmsHeader& aHeader)
+	{
+#if (defined CDMA_API_ENABLED)
+	CSmsSettings*	smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	aHeader.GetDefaultMessageSettingsL(*smsSettings);
+	TSmsMessageType	pduType = aHeader.MessageType();
+	TBool			replyPath = smsSettings->ReplyPath();
+	CleanupStack::PopAndDestroy(smsSettings);
+#else
+	CSmsPDU::TSmsPDUType	pduType=aHeader.Type();
+	TBool					replyPath = aHeader.ReplyPathProvided();
+#endif
+	iTestStep.INFO_PRINTF2(_L("  pduType                      : %d"), pduType);
+	iTestStep.INFO_PRINTF2(_L("  replyPathProvided            : %d"), replyPath);
+	}
+
+
+/**
+ * Prints the CRichText of the entry
+ * @param  CRichText& aBodyText - Text to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessRichTextBodyL(CRichText& /*aBodyText*/)
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessProcessExistingMsg.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,89 @@
+// 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"
+// which accompanies 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 contains CTestMessProcessExistingMsg
+// Base class for processing an existing message
+// 
+//
+
+/**
+ @file TestMessProcessExistingMsg.cpp
+*/
+
+#include "TestMessProcessExistingMsg.h"
+
+// EPOC includes
+#include <mtclreg.h>
+#include <miuthdr.h>
+#include <txtfmlyr.h>
+#include <txtrich.h>
+#include <miutmsg.h>
+
+/**
+ * Constructor.
+ * @return - None
+ * 
+*/	
+CTestMessProcessExistingMsg::CTestMessProcessExistingMsg()
+:	CTestMessBase(ETrue)
+	{
+	}
+
+/**
+ * Override of base class pure virtual function
+ * @return - TVerdict code
+ * @leave - KErrNoMemory - memory allocatior failure
+ * @leave - KErrBadLibraryEntryPoint  - Malformed MTM
+ * @leave - KErrNotFound - Not found the mtmUid and StepStepResult set to Fail
+ * 
+*/	
+TVerdict CTestMessProcessExistingMsg::doTestStepL()
+	{
+	if ( TestStepResult() == EPass )
+		{
+		CClientMtmRegistry*	clientMtmRegistry=CClientMtmRegistry::NewL(*iSession);
+		CleanupStack::PushL(clientMtmRegistry);
+
+		iMtmID=EntryL().Entry().iMtm;
+
+		CBaseMtm*	baseMtm=clientMtmRegistry->NewMtmL(iMtmID);
+		CleanupStack::PushL(baseMtm);
+
+		// switch the context
+		TMsvId		msgId=EntryL().EntryId();
+		PrintEntryL(EntryL());
+		baseMtm->SwitchCurrentEntryL(msgId);
+		baseMtm->LoadMessageL();
+
+		ProcessMessageL(*baseMtm, msgId);
+
+		if ( TestStepResult() == EPass )
+			{
+			PostProcessMessageL();
+			}
+
+		CleanupStack::PopAndDestroy(2, clientMtmRegistry);
+		}
+	
+	return TestStepResult();
+	}
+
+/**
+ * Nothing done for open
+ * @return None
+ * @leave KErrNone and TestStepResult set to EFail
+ * 
+*/
+void CTestMessProcessExistingMsg::PostProcessMessageL()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessProcessor.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,288 @@
+// 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"
+// which accompanies 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 contains CTestMessProcessor which an active object utility
+// used for send/recieving or any time consuming 
+// 
+//
+
+#include "TestMessProcessor.h"
+#include "TestMessBase.h"
+
+CTestMessProcessor* CTestMessProcessor::NewL(CTestStep& aTestStep, CMsvSession& aSession)
+	{
+	CTestMessProcessor*	self=new(ELeave) CTestMessProcessor(aTestStep, aSession);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestMessProcessor::CTestMessProcessor(CTestStep& aTestStep, CMsvSession& aSession)
+:	CActive(EPriorityStandard)
+,	iState(EStatePrepareToSendMsg)
+,	iTestStep(aTestStep)
+,	iSession(aSession)
+,	iEntry(NULL)
+,	iMsgId(KMsvRootIndexEntryId)
+,	iClient(NULL)
+,	iMsvOperation(NULL)
+,	iCancelSms(EFalse)
+	{
+	}
+
+CTestMessProcessor::~CTestMessProcessor()
+	{
+	delete iEntry;
+	iEntry=NULL;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	}
+
+void CTestMessProcessor::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CTestMessProcessor::DoCancel()
+	{
+	iTestStep.INFO_PRINTF1(_L("Cancel operation"));
+	iMsvOperation->Cancel();
+	}
+
+void CTestMessProcessor::DisplayProgress()
+	{
+	// display the current progress
+	switch(iState)
+		{
+	case EStatePrepareToSendMsg:
+		{
+		TMsvLocalOperationProgress			temp;
+		TPckgC<TMsvLocalOperationProgress>	progress(temp);
+
+		progress.Set(iMsvOperation->ProgressL());
+		iTestStep.INFO_PRINTF1(_L("   Progress"));
+		iTestStep.INFO_PRINTF2(_L("       Operation              :%d"), progress().iType);
+		iTestStep.INFO_PRINTF2(_L("       Total Number Of Entries:%d"), progress().iTotalNumberOfEntries);
+		iTestStep.INFO_PRINTF2(_L("       Number Completed       :%d"), progress().iNumberCompleted);
+		iTestStep.INFO_PRINTF2(_L("       Number Failed          :%d"), progress().iNumberFailed);
+		iTestStep.INFO_PRINTF2(_L("       Number Remaining       :%d"), progress().iNumberRemaining);
+		iTestStep.INFO_PRINTF2(_L("       Error                  :%d"), progress().iError);
+		iTestStep.INFO_PRINTF2(_L("       Id                     :%x"), progress().iId);
+		}
+		break;
+	case EStateRequest:
+		iClient->DisplayProgressL(EFalse, iMsvOperation);
+		break;
+	default:
+		break;
+		}
+	}
+
+void CTestMessProcessor::SendEmailMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+/**
+ Sends the sms message. It sets the fields of the enty.
+ @param aMsgId - TMsvId of the message
+ @param aClient - Pointer to the MTestMessProcessClient
+ @param aCancelSms - Bool value for the Cancel sms flag
+*/
+void CTestMessProcessor::SendSmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient, TBool aCancelSms)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+	iCancelSms = aCancelSms;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetConnected(ETrue);
+	iMsgEntry.SetFailed(EFalse);
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	iMsgEntry.iError = KErrNone;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+void CTestMessProcessor::SendMmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+void CTestMessProcessor::MtmRequestL(TMsvId aAccountId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aAccountId;
+	iClient=aClient;
+	iState=EStateRequest;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iStatus = KRequestPending;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+	if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+		{
+		SetActive();
+		}
+	}
+
+void CTestMessProcessor::RunL()
+	{
+	switch(iState)
+		{
+	case EStatePrepareToSendMsg:
+		switch (iStatus.Int())
+			{
+		case KErrNone:
+			{
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+			delete iEntry;
+			iEntry=NULL;
+			iEntry=iSession.GetEntryL(iMsgId);
+			iMsgEntry=iEntry->Entry();
+			iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+			iEntry->ChangeL(iMsgEntry);
+			if ( iMsgEntry.SendingState() == KMsvSendStateWaiting )
+				{
+				iState=EStateRequest;
+				iStatus = KRequestPending;
+				TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+				if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+					{
+					SetActive();
+					}
+				else
+					{
+					CActiveScheduler::Stop();
+					}
+				}
+			else
+				{
+				iTestStep.ERR_PRINTF2(_L("Sending State not Waiting :%d"), iMsgEntry.SendingState());
+				iTestStep.SetTestStepResult(EFail);
+				CActiveScheduler::Stop();
+				}
+			}
+			break;
+		case KErrCancel:
+			{
+			if(iCancelSms)
+				{
+				iTestStep.INFO_PRINTF1(_L("Sending of the mesage Cancelled successfully"));
+				}
+			else
+				{
+				iTestStep.ERR_PRINTF2(_L("Message failed to Send, Error = %d"), iStatus.Int());
+				iTestStep.SetTestStepResult(EFail);
+				}
+			CActiveScheduler::Stop();
+			break;
+			}
+		default:
+			iTestStep.ERR_PRINTF2(_L("Unknown Event :%d"), iStatus.Int());
+			iTestStep.SetTestStepResult(EFail);
+			CActiveScheduler::Stop();
+			}
+		break;
+	case EStateRequest:
+		switch (iStatus.Int())
+			{
+		case KErrNone:
+			{
+			TInt	error=iClient->DisplayProgressL(ETrue, iMsvOperation);
+			if ( error != KErrNone )
+				{
+				iTestStep.ERR_PRINTF2(_L("Progress Error:%d"), error);
+				iTestStep.SetTestStepResult(EFail);
+				}
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+
+			//	Is there another operation
+			if ( iClient->MoreOperations() )
+				{
+				iStatus = KRequestPending;
+				TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+				if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+					{
+					SetActive();
+					}
+				else
+					{
+					CActiveScheduler::Stop();
+					}
+				}
+			else
+				{
+				CActiveScheduler::Stop();
+				}
+			}
+			break;
+		case KErrServerTerminated:
+			{
+			TInt	error=iClient->DisplayProgressL(ETrue, iMsvOperation);
+			if ( error != KErrServerTerminated )
+				{
+				iTestStep.ERR_PRINTF2(_L("Progress Error:%d"), error);
+				iTestStep.SetTestStepResult(EFail);
+				}
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+			CActiveScheduler::Stop();
+			}
+		default:
+			iTestStep.ERR_PRINTF2(_L("Unknown Event :%d"), iStatus.Int());
+			iTestStep.SetTestStepResult(EFail);
+			CActiveScheduler::Stop();
+			}
+		break;
+	default:
+		iTestStep.ERR_PRINTF1(_L("No handler found in CTestMessProcessor class"));
+		iTestStep.SetTestStepResult(EFail);
+		CActiveScheduler::Stop();
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,192 @@
+// 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"
+// which accompanies 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 "TestMessServer.h"
+#include "TestMessSession.h"
+#include "TestMessCleanMessageFolder.h"
+#include "TestMessCreateSmsAccount.h"
+//IMK #include "TestMessCreatePopAccount.h"
+//IMK #include "TestMessCreateImapAccount.h"
+#include "TestMessSetDefaultSc.h"
+//IMK #include "TestMessCreateBIO.h"
+//IMK #include "TestMessCreateEmail.h"
+//IMK #include "TestMessCreateBulkEmail.h"
+//IMK #include "TestMessCreateEMS.h"
+#include "TestMessCreateSMS.h"
+//IMK #include "TestMessCreateBulkSMS.h"
+//IMK #include "TestMessEntryCount.h"
+//IMK #include "TestMessSendEmail.h"
+//IMK #include "TestMessSendBulkEmail.h"
+//IMK #include "TestMessSendSms.h"
+//IMK #include "TestMessDeleteEmailImap.h"
+//IMK #include "TestMessDeleteEmailPop.h"
+//IMK #include "TestMessFullSyncImap.h"
+//IMK #include "TestMessReceiveEmailImap.h"
+//IMK #include "TestMessReceiveEmailPop.h"
+//IMK #include "TestMessOpen.h"
+//IMK #include "TestMessVerifyEntry.h"
+//IMK #include "TestMessReply.h"
+//IMK #include "TestMessForward.h"
+//IMK #include "TestMessCompareMessages.h"
+//IMK #include "TestMessSetSyncRateImap.h"
+//IMK #include "TestMessDeleteSharedData.h"
+#include "TestMessEditEntry.h"
+//IMK #include "TestMessSaveEmailAttachments.h"
+//IMK #include "TestMessDeleteFolder.h"
+//IMK #include "TestMessCreateFolder.h"
+//IMK #include "TestMessRenameFolder.h"
+//IMK #include "TestMessMoveMessages.h"
+//IMK #include "TestMessSearchMessage.h"
+//IMK #include "TestMessDeleteMessages.h"
+//IMK #include "TestMessScheduleSendSMS.h"
+//IMK #include "TestMessCancelScheduledSMS.h"
+//IMK #include "TestMessVerifyScheduleSMS.h"
+//IMK #include "TestMessBackupStore.h"
+//IMK #include "TestMessRestoreStore.h"
+//IMK #include "TestMessReceiveHeadersEmailPop.h"
+//IMK #if (defined _PLATTEST_CDMA_)
+//IMK #include "TestMessCreateCancelSms.h"
+//IMK #endif
+
+
+// EPOC includes
+#include <e32base.h>
+#include <es_sock.h>
+#include <smsuaddr.h>
+#include <test/testexecuteserverutils.h>
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+/*@}*/
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler*	sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CTestMessServer*	server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTestMessServer::NewL());
+	if ( err==KErrNone )
+		{
+		// 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;
+		}
+#if (defined TRAP_IGNORE)
+	TRAP_IGNORE(MainL());
+#else
+	TRAPD(err,MainL());
+#endif
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+
+CTestMessServer* CTestMessServer::NewL()
+	{
+	CTestMessServer*	server=new(ELeave) CTestMessServer();
+	CleanupStack::PushL(server);
+	RProcess	handle = RProcess();
+	TParsePtrC	serverName(handle.FileName());
+	server->ConstructL(serverName.Name());
+	CleanupStack::Pop();
+	return server;
+	}
+
+CTestMessServer::CTestMessServer()
+:	CTestServer()
+,	iSharedData(NULL)
+	{
+	}
+
+void CTestMessServer::ConstructL(const TDesC& aName)
+	{
+	CTestServer::ConstructL(aName);
+	iSharedData=CTestMessSharedData::NewL();
+	}
+
+CTestMessServer::~CTestMessServer()
+	{
+	delete iSharedData;
+	iSharedData=NULL;
+	}
+
+CSession2* CTestMessServer::NewSessionL(const TVersion& /*aVersion*/,const RMessage2& /*aMessage*/) const
+/**
+ * @param RMessage - RMessage for the session open
+ * Secure version
+ */
+	{
+	CTestSession*	session = new (ELeave) CTestMessSession(iSharedData);
+	CONST_CAST(CTestMessServer*,this)->IncSessionCount();
+	return session;
+	}
+
+// constructor for ESOCK test suite
+// this creates all the ESOCK test steps and
+// stores them inside CTestSuiteEsock
+CTestStep* CTestMessServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestMessBase*	testStep = NULL;
+
+	if(aStepName == _L("CleanMessageFolder"))
+		{
+		testStep = new CTestMessCleanMessageFolder();
+		}
+	else if(aStepName == _L("CreateSms"))
+		{
+		testStep = new CTestMessCreateSMS();
+		}
+	else if(aStepName == _L("CreateSmsAccount"))
+		{
+		testStep = new CTestMessCreateSmsAccount();
+		}
+	else if(aStepName == _L("SetSmsSc"))
+		{
+		testStep = new CTestMessSetDefaultSc();
+		}
+	return testStep;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessSession.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,50 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "TestMessSession.h"
+
+CTestMessSession::CTestMessSession(CTestMessSharedData* aSharedData)
+:	CTestSession()
+,	iSharedData(aSharedData)
+	{
+	}
+
+
+void CTestMessSession::ServiceL(const RMessage2& aMessage)
+	{
+	CTestSession::ServiceL(aMessage);
+	switch(aMessage.Function())
+		{
+		case EOpenTestStep :
+			{
+			}
+			break;
+		case ERunTestStep :
+			{
+			iSharedData->DoProcessL();
+			}
+			break;
+		case EAbortTestStep :
+			{
+			}
+			break;
+		case ECloseTestStep :
+			{
+			}
+			break;
+		default:
+			break;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessSetDefaultSC.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,122 @@
+// 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"
+// which accompanies 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 contains TestMessSetDefaultSc which sets an SMS
+// SC as default SC.
+// 
+//
+
+#include "TestMessSetDefaultSC.h"
+
+// EPOC includes
+#include <msvids.h>
+#include <miutset.h>
+#include <smutset.h>
+#include <etelmm.h>
+#include <msvstore.h>
+#include <csmsaccount.h>
+
+_LIT(KSCName,		"scname");
+
+CTestMessSetDefaultSc::CTestMessSetDefaultSc()
+:	CTestMessBase(EFalse)
+	{
+	SetTestStepName(_L("SetSmsSc"));
+	}
+
+TVerdict CTestMessSetDefaultSc::doTestStepL()
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Set Default Service Center"));
+
+	CSmsSettings*		smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	SetEntryL(KMsvRootIndexEntryId);
+
+	EntryL().SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=EntryL().ChildrenWithTypeL(KUidMsvServiceEntry);
+	CleanupStack::PushL(selection);
+	TInt				count=selection->Count();
+	TBool				found=EFalse;
+	for (TInt i=count; i>0 && !found; )
+		{
+		SetEntryL(selection->At(--i));
+
+		//	Log child
+		if	(	EntryL().Entry().iMtm == KUidMsgTypeSMS &&
+				EntryL().Entry().iType == KUidMsvServiceEntry
+			)
+			{
+			found=ETrue;
+			}
+		}
+
+	if ( !found )
+		{
+		ERR_PRINTF1(_L("No SMS Account found"));
+		SetTestStepResult(EFail);
+		}
+
+	TName	network;
+//IMK	TBool	returnValue=(GetPhoneSmsNetworkL(network)==KErrNone);
+TBool	returnValue=false; //IMK
+	TPtrC	ptrSCName(network);
+
+	if ( !returnValue )
+		{
+		returnValue=GetStringFromConfig(ConfigSection(), KSCName, ptrSCName);
+		}
+	if ( !returnValue )
+		{
+		ERR_PRINTF1(_L("No SC specified in script/ini file"));
+		SetTestStepResult(EFail);
+		}
+
+	INFO_PRINTF2(_L("SC Name = %S"), &ptrSCName);
+
+	if ( TestStepResult()==EPass )
+		{
+		CSmsAccount*	smsAccount = CSmsAccount::NewLC();
+		smsAccount->LoadSettingsL(*smsSettings);
+		const TInt	numSCAddr = smsSettings->ServiceCenterCount();
+
+		if( !numSCAddr )
+			{
+			ERR_PRINTF1(_L("No SC found"));
+			SetTestStepResult(EFail);
+			}
+
+		TBool	scFound	= EFalse;
+		for( TInt index=0; (index<numSCAddr) && (!scFound);index++ )
+			{
+			CSmsServiceCenter&	scAddr = smsSettings->GetServiceCenter(index);
+			if( (scAddr.Name()).CompareF(ptrSCName) == 0)
+				{
+				smsSettings->SetDefaultServiceCenter(index);
+				smsAccount->SaveSettingsL(*smsSettings);
+				scFound = ETrue;
+				}
+			}
+
+		if ( !scFound )
+			{
+			ERR_PRINTF2(_L("%S NOT Found"), &ptrSCName);
+			SetTestStepResult(EFail);
+			}
+
+		CleanupStack::PopAndDestroy(smsAccount);
+		}
+	CleanupStack::PopAndDestroy(2, smsSettings);
+
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessSharedData.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,276 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestMessSharedData
+// 
+//
+
+#include "TestMessSharedData.h"
+
+#include <mtclbase.h>
+#include <msvids.h>
+#include <e32std.h>
+#include <imapcmds.h>
+
+_LIT(KName,			"name");
+
+CTestMessSharedData* CTestMessSharedData::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.
+ */
+	{
+	CTestMessSharedData*	sharedData = new (ELeave) CTestMessSharedData();
+	CleanupStack::PushL(sharedData);
+	sharedData->ConstructL();
+	CleanupStack::Pop(sharedData);
+	return sharedData;
+	}
+
+CTestMessSharedData::CTestMessSharedData()
+:	CBase()
+,	iSession(NULL)
+,	iMtmRegistry(NULL)
+,	iList(NULL)
+,	iAnyPostStepToDo(NULL)
+,	iDeleteTestStep(EFalse)
+	{
+	}
+
+void CTestMessSharedData::ConstructL()
+	{
+	iSession=CMsvSession::OpenSyncL(*this);
+	iMtmRegistry=CClientMtmRegistry::NewL(*iSession);
+	}
+
+CTestMessSharedData::~CTestMessSharedData()
+	{
+	while ( iList != NULL )
+		{
+		CMsgEntry*	entry=iList;
+		iList=iList->iNext;
+		delete entry;
+		}
+	delete iMtmRegistry;
+	iMtmRegistry=NULL;
+	delete iSession;
+	iSession=NULL;
+	}
+
+void CTestMessSharedData::DoProcessL()
+	{
+	if ( iAnyPostStepToDo != NULL )
+		{
+		if (iDeleteTestStep)
+			{
+			iAnyPostStepToDo->DoCancelProcessL();
+			iDeleteTestStep=EFalse;
+			}
+		else
+			{
+			iAnyPostStepToDo->DoProcessL(*iMtmRegistry);
+			}
+		iAnyPostStepToDo=NULL;
+		}
+	}
+
+void CTestMessSharedData::IMAP4ConnectAndSyncCompleteAfterDisconnectL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep)
+	{
+	iList=CMsgIMAP4ConnectAndSyncComplete::NewL(aMtmId, aMsvId, aStep, iList);
+	iAnyPostStepToDo=iList;
+	}
+
+TInt CTestMessSharedData::DeleteEntryL(CTestStep& aStep)
+	{
+	TInt	ret=KErrNone;
+	TPtrC	name;
+
+	if ( !aStep.GetStringFromConfig(aStep.ConfigSection(), KName, name) )
+		{
+		aStep.ERR_PRINTF1(_L("Name not found"));
+		aStep.SetTestStepResult(EFail);
+		ret=KErrArgument;
+		}
+	else
+		{
+		aStep.INFO_PRINTF2(_L("Name : %S"), &name);
+
+		CMsgEntry*	msgParent=NULL;
+		CMsgEntry*	msgEntry=iList;
+		TBool		found=EFalse;
+
+		while ( (msgEntry!=NULL) && !found )
+			{
+			if ( msgEntry->iName.Compare(name) == 0 )
+				{
+				if ( msgParent!=NULL )
+					{
+					msgParent->iNext=msgEntry->iNext;
+					}
+				else
+					{
+					iList=msgEntry->iNext;
+					}
+				iDeleteTestStep=ETrue;
+				iAnyPostStepToDo=msgEntry;
+				found=ETrue;
+				}
+			else
+				{
+				msgParent=msgEntry;
+				msgEntry=msgEntry->iNext;
+				}
+			}
+
+		if ( !found )
+			{
+			aStep.ERR_PRINTF1(_L("Message Entry not found"));
+			aStep.SetTestStepResult(EFail);
+			ret=KErrNotFound;
+			}
+		}
+
+	return ret;
+	}
+
+CTestMessSharedData::CMsgEntry::CMsgEntry(CMsgEntry* aList)
+:	CActive(EPriorityStandard)
+,	iNext(aList)
+,	iReadyToBeDeleted(EFalse)
+	{
+	}
+
+void CTestMessSharedData::CMsgEntry::ConstructL(CTestStep& aStep)
+	{
+	TPtrC	name;
+
+	//	Read in name tag
+	if ( !aStep.GetStringFromConfig(aStep.ConfigSection(), KName, name) )
+		{
+		aStep.ERR_PRINTF1(_L("Name not found"));
+		aStep.SetTestStepResult(EFail);
+		}
+	else
+		{
+		aStep.INFO_PRINTF2(_L("Name : %S"), &name);
+		iName.Copy(name);
+		}
+	}
+
+CTestMessSharedData::CMsgEntry::~CMsgEntry()
+	{
+	}
+
+void CTestMessSharedData::CMsgEntry::DoCancel()
+	{
+	}
+
+void CTestMessSharedData::CMsgEntry::RunL()
+	{
+	iReadyToBeDeleted=ETrue;
+	}
+
+CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete* CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::NewL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep, CMsgEntry* aList)
+	{
+	CMsgIMAP4ConnectAndSyncComplete*	self= new (ELeave) CMsgIMAP4ConnectAndSyncComplete(aMtmId, aMsvId, aList);
+	CleanupStack::PushL(self);
+	self->ConstructL(aStep);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::CMsgIMAP4ConnectAndSyncComplete(TUid aMtmId, TMsvId aMsvId, CMsgEntry* aList)
+:	CMsgEntry(aList)
+,	iMtmId(aMtmId)
+,	iMsvId(aMsvId)
+,	iBaseMtm(NULL)
+,	iOperation(NULL)
+	{
+	}
+
+CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::~CMsgIMAP4ConnectAndSyncComplete()
+	{
+	if ( iOperation != NULL )
+		{
+		delete iOperation;
+		iOperation=NULL;
+		}
+	delete iBaseMtm;
+	iBaseMtm=NULL;
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::RunL()
+	{
+	CMsgEntry::RunL();
+	delete iOperation;
+	iOperation=NULL;
+	delete iBaseMtm;
+	iBaseMtm=NULL;
+
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::DoProcessL(CClientMtmRegistry& aMtmRegistry)
+	{
+	iBaseMtm=aMtmRegistry.NewMtmL(iMtmId);
+	CActiveScheduler::Add(this);
+
+	iBaseMtm->SwitchCurrentEntryL(iMsvId);
+	CMsvEntrySelection*	selection=new (ELeave) CMsvEntrySelection();
+	CleanupStack::PushL(selection);
+	selection->Reset();
+	selection->AppendL(iMsvId);
+	selection->AppendL(iMsvId);	// remote inbox
+
+	TPckg<MMsvImapConnectionObserver*>	parameter(this);
+	iOperation=iBaseMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndSyncCompleteAfterDisconnect, *selection, parameter, iStatus);
+	CleanupStack::PopAndDestroy(selection);
+	SetActive();
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::DoCancelProcessL()
+	{
+	if ( iOperation != NULL )
+		{
+		iOperation->Cancel();
+		}
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::HandleImapConnectionEvent(TImapConnectionEvent aConnectionEvent)
+	{
+	switch (aConnectionEvent)
+		{
+	/** Connecting to server. */
+	case EConnectingToServer:
+		break;
+	/** Synchronising folder list. */
+	case ESynchronisingFolderList:
+		break;
+	/** Synchronising inbox. */
+	case ESynchronisingInbox:
+		break;
+	/** Synchronising folders. */
+	case ESynchronisingFolders:
+		break;
+	/** Synchronisation complete. */
+	case ESynchronisationComplete:
+		break;
+	/** Disconnecting. */
+	case EDisconnecting:
+		break;
+	/** Connection completed. */
+	case EConnectionCompleted:
+		break;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessStoreProcessUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,256 @@
+// 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"
+// which accompanies 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 contains CTestMessStoreProcessUtil. Base class process what is in the message store
+// 
+//
+
+/**
+ @file TestMessStoreProcessUtil.cpp
+*/
+
+#include "TestMessStoreProcessUtil.h"
+
+//	EPOC include
+#include <txtrich.h>
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+// Literal constants used for the character set
+_LIT(KChineseGB2312,		"ChineseGB2312");
+_LIT(KChineseHz,			"ChineseHz");
+_LIT(KChineseBig5,			"ChineseBig5");
+/*@}*/
+
+CTestMessStoreProcessUtil::CTestMessStoreProcessUtil(CTestMessBase& aTestStep, TBool aReadOnly)
+:	CBase()
+,	iTestStep(aTestStep)
+,	iReadOnly(aReadOnly)
+	{
+	}
+
+/**
+ * Process the message entry
+ * @param  TMsvId aMsvId - Id of message to edit
+ * @return TInt - return TErrNone if all worked
+ *  
+*/
+TInt CTestMessStoreProcessUtil::ProcessEntryL(TMsvId aMsvId)
+	{
+	TInt		ret=KErrNone;
+	CMsvEntry*	msvEntry=iTestStep.Session().GetEntryL(aMsvId);
+	CleanupStack::PushL(msvEntry);
+
+	if ( msvEntry->HasStoreL() )
+		{
+		CMsvStore*	store=NULL;
+		if ( iReadOnly )
+			{
+			store=msvEntry->ReadStoreL();
+			}
+		else
+			{
+			store=msvEntry->EditStoreL();
+			}
+		CleanupStack::PushL(store);
+
+		RArray<TUid>	ids;
+		ids.Append(KUidMsgFileIMailHeader);
+		ids.Append(KUidMsgFileMimeHeader);
+		ids.Append(KUidMsgFileInternetAccessPreferences);
+		ids.Append(KUidMsvSMSHeaderStream);
+		ids.Append(KUidMsvDefaultServices);
+		ids.Append(KMsvEntryRichTextBody);
+		for ( TUint uidIndex=ids.Count(); uidIndex>0; )
+			{
+			TUid	uid=ids[--uidIndex];
+
+			if ( store->IsPresentL(uid) )
+				{
+				if ( uid==KUidMsgFileIMailHeader )
+					{
+					// Process the CImHeader info
+					ProcessImHeaderL(*store);
+					}
+				else if ( uid==KUidMsgFileMimeHeader )
+					{
+					// Process the CImMimeHeader info
+					ProcessImMimeHeaderL(*store);
+					}
+				else if ( uid==KUidMsgFileInternetAccessPreferences )
+					{
+					}
+				else if ( uid==KUidMsvSMSHeaderStream )
+					{
+					// Process the CSmsHeader info
+					ProcessSmsHeaderStreamL(*store);
+					}
+				else if ( uid==KUidMsvDefaultServices )
+					{
+					}
+				else if ( uid==KMsvEntryRichTextBody )
+					{
+					// Process the CRichText info
+					ProcessRichTextBodyL(*store);
+					}
+				else
+					{
+					iTestStep.INFO_PRINTF2(_L("Cannot process %x"), uid.iUid);
+					}
+				}
+			}
+
+		// Commit to the store
+		if ( !iReadOnly )
+			{
+			store->CommitL();
+			}
+		CleanupStack::PopAndDestroy(store);
+		}
+
+	CleanupStack::PopAndDestroy(msvEntry);
+
+	return ret;
+	}
+
+// Process the CImHeader information
+void CTestMessStoreProcessUtil::ProcessImHeaderL(CMsvStore& aStore)
+	{
+	CImHeader*	header=CImHeader::NewLC();
+	TRAPD(err, header->RestoreL(aStore));
+
+	if ( err==KErrNone )
+		{
+		ProcessImHeaderL(*header);
+		if ( !iReadOnly )
+			{
+			header->StoreL(aStore);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(header);
+	}
+
+// Process the CImMimeHeader information
+void CTestMessStoreProcessUtil::ProcessImMimeHeaderL(CMsvStore& aStore)
+	{
+	CImMimeHeader*	header=CImMimeHeader::NewLC();
+	TRAPD(err, header->RestoreL(aStore));
+
+	if ( err==KErrNone )
+		{
+		ProcessImMimeHeaderL(*header);
+		if ( !iReadOnly )
+			{
+			header->StoreL(aStore);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(header);
+	}
+
+
+// Process the CSmsHeader information
+void CTestMessStoreProcessUtil::ProcessSmsHeaderStreamL(CMsvStore& aStore)
+	{
+	CParaFormatLayer*	paraFormatLayer=CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+
+	CCharFormatLayer*	charFormatLayer=CCharFormatLayer::NewL(); 
+	CleanupStack::PushL(charFormatLayer);
+
+	CRichText*			bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(bodyText);
+
+	CSmsHeader*			header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *bodyText);
+	CleanupStack::PushL(header);
+
+	TRAPD(err, header->RestoreL(aStore));
+	if ( err == KErrNone )
+		{
+		ProcessSmsHeaderStreamL(*header);
+		if ( !iReadOnly )
+			{
+			header->StoreL(aStore);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(4, paraFormatLayer);
+	}
+
+
+// Process the CRichText information
+void CTestMessStoreProcessUtil::ProcessRichTextBodyL(CMsvStore& aStore)
+	{
+	CParaFormatLayer*	paraFormatLayer=CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+
+	CCharFormatLayer*	charFormatLayer=CCharFormatLayer::NewL(); 
+	CleanupStack::PushL(charFormatLayer);
+
+	CRichText*			bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(bodyText);
+
+	TRAPD(err, aStore.RestoreBodyTextL(*bodyText));
+	if ( err == KErrNone )
+		{
+		ProcessRichTextBodyL(*bodyText);
+		if ( !iReadOnly )
+			{
+			aStore.StoreBodyTextL(*bodyText);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(3, paraFormatLayer);
+	}
+
+/**
+ * Saves the new character set to the message 
+ * @param  TPtrC aCharacterSetType - New Character set type to be stored for the received message
+ * @param  TUint &aCharSetVal - character set value
+ * @return TBool 
+ * @panic None
+ * @leave None
+ *
+*/
+TBool CTestMessStoreProcessUtil::ValidCharacterSetInfo(const TPtrC& aCharacterSetType, TUint &aCharSetVal)
+	{
+	TBool	hasSet = ETrue;
+
+	if ( aCharacterSetType.Compare(KChineseGB2312) == 0 )
+		{
+		iTestStep.INFO_PRINTF1(_L("Character set set to Chinese GB2312"));
+		aCharSetVal =  KCharacterSetIdentifierGb2312;
+		}
+	else if (aCharacterSetType.Compare(KChineseHz) == 0)
+		{
+		iTestStep.INFO_PRINTF1(_L("Character set set to Chinese Hz"));
+		aCharSetVal = KCharacterSetIdentifierHz;
+		}
+	else if ( aCharacterSetType.Compare(KChineseBig5) == 0 )
+		{
+		iTestStep.INFO_PRINTF1(_L("Character set set to Chinese Big5"));
+		aCharSetVal = KCharacterSetIdentifierBig5;
+		}
+	else
+		{
+		// To be updated later
+		hasSet= EFalse;
+		iTestStep.ERR_PRINTF2(_L("Character not supported in test code: %S"), &aCharacterSetType);
+		iTestStep.SetTestStepResult(EFail);
+		}
+
+	return hasSet;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessTimer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,63 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessTimer.h
+// This contains CTestMessTimer
+// EPOC includes
+// 
+//
+
+#include "TestMessTimer.h"
+#include "TestMessProcessor.h"
+
+//
+// Construction/Destruction
+//
+
+CTestMessTimer* CTestMessTimer::NewL(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor)
+	{
+	CTestMessTimer*	self=new(ELeave) CTestMessTimer(aInterval, aProcessor);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestMessTimer::CTestMessTimer(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor)
+: CTimer(EPriorityStandard)
+, iInterval(aInterval)
+, iProcessor(aProcessor)
+	{
+	}
+
+void CTestMessTimer::ConstructL()
+	{
+	CTimer::ConstructL();
+	CActiveScheduler::Add(this);
+	}
+
+
+CTestMessTimer::~CTestMessTimer()
+	{
+	}
+
+void CTestMessTimer::RunL()
+	{
+	iProcessor.DisplayProgress();
+	IssueRequest();
+	};
+
+void CTestMessTimer::IssueRequest()
+	{
+	After(iInterval);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessWatcher.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,73 @@
+// 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"
+// which accompanies 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 contains CTestMessWatcher which starts the message watchers
+// 
+//
+
+#include "TestMessWatcher.h"
+
+_LIT(KWatcherExe, "z:\\system\\libs\\watcher.exe");
+
+CTestMessWatcher* CTestMessWatcher::NewL(TInt aPriority)
+	{
+	CTestMessWatcher* self = new (ELeave) CTestMessWatcher(aPriority);
+	CleanupStack::PushL(self);
+
+	self->ConstructL();
+
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestMessWatcher::~CTestMessWatcher()
+	{
+	Cancel();
+	iTimer.Close();
+	if (iConstructed)
+		iWatcher.Kill(KErrNone);
+
+	iWatcher.Close();
+	}
+
+CTestMessWatcher::CTestMessWatcher(TInt aPriority)
+:	CActive(aPriority)
+,	iConstructed(EFalse)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CTestMessWatcher::ConstructL()
+	{
+	TInt	ret=iWatcher.Create(KWatcherExe, KNullDesC);
+	switch ( ret )
+		{
+	case KErrNone:
+		iWatcher.Resume();
+		iConstructed = ETrue;
+	case KErrAlreadyExists:
+		break;
+	default:
+		User::Leave(ret);
+		}
+	}
+
+void CTestMessWatcher::RunL()
+	{
+	}
+
+void CTestMessWatcher::DoCancel()
+	{
+	iTimer.Cancel();
+	iStatus=KErrCancel;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/TestData/Smoketest_Mess.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,751 @@
+[default]
+smsto=07769588944
+smsbearer=NBS
+smsencoding=7
+smsDeliveryReport=NO
+mmsto=07769588944
+mmsDeliveryReport=NO
+progress=120
+
+[19101_RootFolder]
+depth=0
+
+[27030_SmsO2Account]
+scname=O2
+scnumber=+447802000332
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[27031_SmsOrangeAccount]
+scname=Orange
+scnumber=+447973100973
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[27032_SmsTMobileAccount]
+scname=TMobile
+scnumber=+447958879879
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[27029_SmsVodafoneAccount]
+scname=Vodafone
+scnumber=+447785016005
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[21770_SmsAirtelAccount]
+MessageBearerType=CDMA
+scname=Airtel
+scnumber=919845087001
+SmsRejectDuplicate=TRUE
+SmsReplyPath=TRUE
+SmsConCatenate=TRUE
+SmsDeliveryReport=TRUE
+SmsReplyQuoted=TRUE
+
+[SmsHutchAccount]
+scname=Hutch
+scnumber=919886005444
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[28206_MmsAccount]
+accountname=Multimedia Messaging
+serveraddr=http://10.22.64.20
+fromaddr=07769588944
+automaticfetch=TRUE
+iap=14
+
+[27028_ImapAccount]
+accountname=smoketest Imap Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.dial.pipex.com
+inserver=imap.dial.pipex.com
+SyncRate=120
+iap=6
+
+[27027_PopAccount]
+accountname=smoketest Pop Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.dial.pipex.com
+inserver=pop.dial.pipex.com
+iap=6
+
+[21558_ImapAccountAuth]
+accountname=smoketest ImapAuth Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[27035_PopAccountAuth]
+accountname=smoketest PopAuth Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[28381_ImapAccountSSL]
+accountname=smoketest ImapSSL Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+sslwrapper=yes
+sslport=993
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[28382_PopAccountSSL]
+accountname=smoketest PopSSL Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+sslwrapper=yes
+sslport=995
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[27027_VodafoneGprsAccount]
+accountname=Vodafone Gprs Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.vizzavi.co.uk
+inserver=pop.dial.pipex.com
+iap=13
+
+[o2GprsAccount]
+accountname=O2 Gprs Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.o2.co.uk
+inserver=pop.dial.pipex.com
+iap=17
+
+[MmsCount01]
+count=7
+depth=2
+folder1=Local
+folder2=Inbox
+
+[MmsMessage01]
+from=Multimedia Messaging
+subject=mms test1
+priority=high
+
+textmimetype1=text/plain
+textfile1=c:\autosmoketest\Mms\Message1.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+[MmsMessage02]
+from=Multimedia Messaging
+subject=mms test2
+priority=high
+   
+textmimetype1=text/plain
+textfile1=c:\autosmoketest\Mms\Message2.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype1=image/gif
+imgfile1=c:\autosmoketest\Mms\Image2.gif
+imgmimeheaders1=1
+imgmimeheader1name1=content-type
+imgmimeheader1type1=image/gif
+
+[MmsMessage03]
+from=Multimedia Messaging
+subject=mms test3
+priority=high
+
+textmimetype1=text/plain
+textfile1=c:\autosmoketest\Mms\Message3.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype1=image/gif
+imgfile1=c:\autosmoketest\Mms\Image3.gif
+imgmimeheaders1=1
+imgmimeheader1name1=content-type
+imgmimeheader1type1=image/gif
+
+audiomimetype1=audio/basic
+audiofile1=c:\autosmoketest\Mms\Audio3.wav
+audiomimeheaders1=1
+audiomimeheader1name1=content-type
+audiomimeheader1type1=audio/basic
+
+[MmsMessage04]
+from=Multimedia Messaging
+subject=mms test4
+priority=high
+slides=2
+
+textmimetype1=text/plain
+textfile1=c:\autosmoketest\Mms\Message4.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype2=image/gif
+imgfile2=c:\autosmoketest\Mms\Image4.gif
+imgmimeheaders2=1
+imgmimeheader2name1=content-type
+imgmimeheader2type1=image/gif
+
+[MmsMessage05]
+from=Multimedia Messaging
+subject=mms test5
+priority=high
+slides=2
+
+textmimetype1=text/plain
+textfile1=c:\autosmoketest\Mms\Message5.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype2=image/gif
+imgfile2=c:\autosmoketest\Mms\Image5.gif
+imgmimeheaders2=1
+imgmimeheader2name1=content-type
+imgmimeheader2type1=image/gif
+
+audiomimetype2=audio/basic
+audiofile2=c:\autosmoketest\Mms\Audio5.wav
+audiomimeheaders2=1
+audiomimeheader2name1=content-type
+audiomimeheader2type1=audio/basic
+
+[MmsMessage06]
+from=Multimedia Messaging
+subject=mms test6
+priority=high
+slides=3
+
+textmimetype1=text/plain
+textfile1=c:\autosmoketest\Mms\Message6.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+audiomimetype2=audio/basic
+audiofile2=c:\autosmoketest\Mms\Audio6.wav
+audiomimeheaders2=1
+audiomimeheader2name1=content-type
+audiomimeheader2type1=audio/basic
+
+imgmimetype3=image/gif
+imgfile3=c:\autosmoketest\Mms\Image6.gif
+imgmimeheaders3=1
+imgmimeheader3name1=content-type
+imgmimeheader3type1=image/gif
+
+[27584_SmsMessage01]
+recipients=2
+body=c:\autosmoketest\Sms\Message1.txt
+
+[27596_SmsMessage02]
+body=c:\autosmoketest\Sms\Message2.txt
+
+[27587_SmsMessage03]
+body=c:\autosmoketest\Sms\Message3.txt
+encoding=8
+
+[27589_SmsMessage04]
+body=c:\autosmoketest\Sms\Message4.txt
+DeliveryReport=NO
+
+[27591_SmsMessage05]
+body=c:\autosmoketest\Sms\Message5.txt
+
+[27593_SmsMessage06]
+body=c:\autosmoketest\Sms\Message6.txt
+encoding=8
+scheduled=120
+
+[27577_SmsSend01]
+text=This message is going
+
+[20388_SmsSend02]
+text=Hello, this is a plain
+
+[20389_SmsSend03]
+text=Hello, this is a 8-bit
+
+[20390_SmsSend04]
+text=No status report requested
+
+[20392_SmsSend05]
+text=A big message to ya!
+
+[20391_SmsSend06]
+text=This is a big 8-bit
+
+[27595_SmsCount01]
+count=7
+depth=2
+folder1=Local
+folder2=Inbox
+
+[27033_PopMessage01]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage01
+body=c:\autosmoketest\EMail\PopTestMsg01.txt
+priority=high
+count=1
+depth=2
+folder1=smoketest Pop Account
+folder2=PopMessage01
+
+[27044_PopMessage02]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage02
+body=c:\autosmoketest\EMail\PopTestMsg02.txt
+priority=low
+attachments=1
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+count=2
+depth=3
+folder1=smoketest Pop Account
+folder2=PopMessage02
+
+[27040_PopMessage03]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage03
+body=c:\autosmoketest\EMail\PopTestMsg03.txt
+priority=low
+attachments=3
+attachment1=c:\autosmoketest\EMail\Attachment02.txt
+attachment2=c:\autosmoketest\EMail\Attachment02.txt
+attachment3=c:\autosmoketest\EMail\Attachment02.txt
+count=4
+depth=3
+folder1=smoketest Pop Account
+folder2=PopMessage03
+
+[19103_PopMessage04]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage04
+body=c:\autosmoketest\EMail\PopTestMsg04.txt
+priority=low
+attachments=2
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+attachment2=c:\autosmoketest\EMail\Typhoon.zip
+count=3
+depth=3
+folder1=smoketest Pop Account
+folder2=PopMessage04
+
+[27041_PopBox01]
+from=smoketest Pop Account
+
+[28111_PopSend01]
+subject=PopMessage01
+
+[28112_PopSend02]
+subject=PopMessage02
+
+[28114_PopSend03]
+subject=PopMessage03
+
+[28113_PopSend04]
+subject=PopMessage04
+
+[19102_PopCount01]
+count=4
+depth=1
+folder1=smoketest Pop Account
+
+[19102_PopCount01_MadcowSanity]
+count=3
+depth=1
+folder1=smoketest Pop Account
+
+[28360_ImapMessage01]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage01
+body=c:\autosmoketest\EMail\PopTestMsg01.txt
+priority=high
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage01
+
+[28361_ImapMessage02]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage02
+body=c:\autosmoketest\EMail\PopTestMsg02.txt
+priority=low
+attachments=1
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage02
+
+[28362_ImapMessage03]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage03
+body=c:\autosmoketest\EMail\PopTestMsg03.txt
+priority=low
+attachments=3
+attachment1=c:\autosmoketest\EMail\Attachment02.txt
+attachment2=c:\autosmoketest\EMail\Attachment02.txt
+attachment3=c:\autosmoketest\EMail\Attachment02.txt
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage03
+
+[28363_ImapMessage04]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage04
+body=c:\autosmoketest\EMail\PopTestMsg04.txt
+priority=low
+attachments=2
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+attachment2=c:\autosmoketest\EMail\Typhoon.zip
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage04
+
+[19104_ImapBox01]
+name=imapsync
+from=smoketest Imap Account
+depth=1
+folder1=Inbox
+
+[28118_ImapSend01]
+subject=ImapMessage01
+
+[28117_ImapSend02]
+subject=ImapMessage02
+
+[28115_ImapSend03]
+subject=ImapMessage03
+
+[28116_ImapSend04]
+subject=ImapMessage04
+
+[28359_ImapCount01]
+count=4
+depth=2
+folder1=smoketest Imap Account
+folder2=Inbox
+
+[28359_ImapCount01MadcowSanity]
+count=3
+depth=2
+folder1=smoketest Imap Account
+folder2=Inbox
+
+[27048_PopMessage06]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage06
+body=c:\autosmoketest\EMail\PopTestMsg06.txt
+priority=high
+count=1
+depth=2
+folder1=smoketest PopAuth Account
+folder2=PopMessage06
+
+[28364_PopMessage07]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage07
+body=c:\autosmoketest\EMail\PopTestMsg07.txt
+priority=low
+attachments=1
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+count=2
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage07
+
+[28365_PopMessage08]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage08
+body=c:\autosmoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\autosmoketest\EMail\Attachment02.txt
+attachment2=c:\autosmoketest\EMail\Attachment02.txt
+attachment3=c:\autosmoketest\EMail\Attachment02.txt
+count=4
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage08
+
+[28366_PopMessage09]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage09
+body=c:\autosmoketest\EMail\PopTestMsg09.txt
+priority=low
+attachments=2
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+attachment2=c:\autosmoketest\EMail\Typhoon.zip
+count=3
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage09
+
+[28394_PopMessage10]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage10
+body=c:\autosmoketest\EMail\PopTestMsg06.txt
+priority=high
+count=1
+depth=2
+folder1=smoketest PopAuth Account
+folder2=PopMessage10
+
+[28395_PopMessage11]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage11
+body=c:\autosmoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\autosmoketest\EMail\Attachment02.txt
+attachment2=c:\autosmoketest\EMail\Attachment02.txt
+attachment3=c:\autosmoketest\EMail\Attachment02.txt
+count=4
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage11
+
+[27043_PopBox02]
+from=smoketest PopAuth Account
+
+[21560_PopSend06]
+subject=PopMessage06
+
+[27042_PopSend07]
+subject=PopMessage07
+
+[27039_PopSend08]
+subject=PopMessage08
+
+[28367_PopSend09]
+subject=PopMessage09
+
+[28396_PopSend10]
+subject=PopMessage10
+
+[28397_PopSend11]
+subject=PopMessage11
+
+[28368_PopCount02]
+count=4
+depth=1
+folder1=smoketest PopAuth Account
+
+[28373_ImapMessage06]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage06
+body=c:\autosmoketest\EMail\PopTestMsg06.txt
+priority=high
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage06
+
+[28374_ImapMessage07]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage07
+body=c:\autosmoketest\EMail\PopTestMsg07.txt
+priority=low
+attachments=1
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage07
+
+[28375_ImapMessage08]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage08
+body=c:\autosmoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\autosmoketest\EMail\Attachment02.txt
+attachment2=c:\autosmoketest\EMail\Attachment02.txt
+attachment3=c:\autosmoketest\EMail\Attachment02.txt
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage08
+
+[28376_ImapMessage09]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage09
+body=c:\autosmoketest\EMail\PopTestMsg09.txt
+priority=low
+attachments=2
+attachment1=c:\autosmoketest\EMail\Attachment01.txt
+attachment2=c:\autosmoketest\EMail\Typhoon.zip
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage09
+
+[28387_ImapMessage10]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage10
+body=c:\autosmoketest\EMail\PopTestMsg06.txt
+priority=high
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage10
+
+[28388_ImapMessage11]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage11
+body=c:\autosmoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\autosmoketest\EMail\Attachment02.txt
+attachment2=c:\autosmoketest\EMail\Attachment02.txt
+attachment3=c:\autosmoketest\EMail\Attachment02.txt
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage11
+
+[27037_ImapBox02]
+from=smoketest ImapAuth Account
+depth=1
+folder1=Inbox
+
+[27036_ImapSend06]
+subject=ImapMessage06
+
+[28377_ImapSend07]
+subject=ImapMessage07
+
+[28378_ImapSend08]
+subject=ImapMessage08
+
+[28379_ImapSend09]
+subject=ImapMessage09
+
+[28389_ImapSend10]
+subject=ImapMessage10
+
+[28390_ImapSend11]
+subject=ImapMessage11
+
+[28380_ImapCount02]
+count=4
+depth=2
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+
+[28398_PopBox03]
+from=smoketest PopSSL Account
+
+[28399_PopCount03]
+count=2
+depth=1
+folder1=smoketest PopSSL Account
+
+[28391_ImapBox03]
+from=smoketest ImapSSL Account
+depth=1
+folder1=Inbox
+
+[28392_ImapCount03]
+count=2
+depth=2
+folder1=smoketest ImapSSL Account
+folder2=Inbox
+
+[28383_HangUpPipex]
+iap=6
+
+[28384_HangUpNokia]
+iap=7
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/TestData/Sms/Message1.txt	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1 @@
+This message is going to my two buddies
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/FileRead.pm	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,41 @@
+# 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:
+#
+
+#!/usr/bin/perl -w
+package FileRead;
+use strict;
+##########################################################################
+#
+# Name    :  file_read()
+# Synopsis:  Reads in the contents of a file into an array
+# Inputs  :  Filename
+# Outputs :  array
+#
+##########################################################################
+sub file_read
+{
+    my ($filename) = @_;
+
+    local($/) = undef;
+    local(*FILE);
+ 
+    open(FILE, "<$filename") || die "open $filename: $!";
+    my @slurparr = <FILE>;
+    close(FILE) || die "close $filename: $!";
+
+    return $slurparr[0];
+}
+
+1;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/8.0a/configuration.cfg	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+// 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:
+// Version 8.0a
+// 
+//
+
+#if !defined (CONFIGURATION_CFG)
+#define CONFIGURATION_CFG
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/8.0b/configuration.cfg	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+// 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:
+// Version 8.0b
+// 
+//
+
+#if !defined (CONFIGURATION_CFG)
+#define CONFIGURATION_CFG
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/8.1a/configuration.cfg	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+// 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:
+// Version 8.1a
+// 
+//
+
+#if !defined (CONFIGURATION_CFG)
+#define CONFIGURATION_CFG
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/8.1b/configuration.cfg	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+// 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:
+// Version 8.1b
+// 
+//
+
+#if !defined (CONFIGURATION_CFG)
+#define CONFIGURATION_CFG
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/9.0/configuration.cfg	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+// 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:
+// Version 9.0
+// 
+//
+
+#if !defined (CONFIGURATION_CFG)
+#define CONFIGURATION_CFG
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/9.1/configuration.cfg	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+// 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:
+// Version 9.1
+// 
+//
+
+#if !defined (CONFIGURATION_CFG)
+#define CONFIGURATION_CFG
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,32 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For automated smoketest
+// 
+//
+
+#include "../Utils/group/bld.inf"
+#include "../agenda/Group/bld.inf"
+#include "../contacts/group/bld.inf"
+#include "../messaging/Group/bld.inf"
+#include "../Timew/Group/bld.inf"
+#include "../SyncMLApp/group/bld.inf"
+#include "../Phone/group/bld.inf"
+#include "../System/Group/bld.inf"
+
+PRJ_TESTEXPORTS
+../autorom/autoexec.bat			/epoc32/release/winscw/udeb/z/smoketest/autoexec.bat
+../autorom/dummytest.txt	      /epoc32/release/winscw/udeb/z/smoketest/dummytest.txt
+../autorom/smoketests.bat		/epoc32/release/winscw/udeb/z/smoketest/smoketests.bat
+../autorom/smoketests.oby		/epoc32/rom/include/smoketests.oby
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/configuration.cfg	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+// 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:
+// Version 8.1b
+// 
+//
+
+#if !defined (CONFIGURATION_CFG)
+#define CONFIGURATION_CFG
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/testtools_smoketest.history.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="SMOKETEST">
+  <purpose>
+  </purpose>
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Group/testtools_smoketest.mrp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,25 @@
+#
+# 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: 
+#
+
+component	testtools_smoketest
+source	\sf\app\techview\buildverification\smoketest
+exports \sf\app\techview\buildverification\smoketest\Group
+# binary	\sf\app\techview\buildverification\smoketest\group	all
+
+notes_source	\component_defs\release.src
+
+ipr T 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Phone/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,27 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For phone app smoketest
+// 
+//
+
+PRJ_EXPORTS
+
+// For testexecute on eka2 emulators
+../scripts/smoketest_phone.script		/epoc32/release/wins/udeb/z/smoketest/smoketest_phone.script
+../scripts/smoketest_phone.script		/epoc32/release/wins/urel/z/smoketest/smoketest_phone.script
+../scripts/smoketest_phone.script		/epoc32/release/winscw/udeb/z/smoketest/smoketest_phone.script
+../scripts/smoketest_phone.script		/epoc32/release/winscw/urel/z/smoketest/smoketest_phone.script
+
+PRJ_MMPFILES
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Phone/scripts/smoketest_phone.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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 "Eclipse Public License v1.0"
+// which accompanies 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 phone app for 10 seconds
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\phone.exe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SmokeTest.pm	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,434 @@
+# 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 "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# SmokeTestSuite.pm 
+# The SmokeTestSuite package contains subroutines that are needed to build a 
+# testdriver test suite.
+# This script was born on 18/04/2005
+# 
+#
+
+#!/usr/bin/perl -w
+package SmokeTest;
+use SmokeTestROM;
+use SmokeTestSuite;
+use FindBin;
+use lib "$FindBin::Bin\\..\\..\\generic\\utils\\GenResult\\";
+use FileRead; #Need to include a Findbin::path
+use strict;
+
+#
+# Global Variables
+#
+our $BuildDir = $ENV{'BuildDir'}; # usually M:
+our $serverpool = $ENV{'SmokeTestServerPool'};
+our $buildNo = $ENV{'BuildShortName'}; # Eg. 9.1
+# The Client is run from the dir where SmokeTestClient.pl is located
+# This is to ensure that any ROMs and test packages created are stored there.
+our $sourceDir = "$BuildDir\\src\\common\\testtools";
+our $TestSuite = "SmokeTest";
+our $SmokeTestDir;
+our $NandDir;
+our $TestDriverLocation   = "\\epoc32\\tools\\TDEP";   # location for TD zips
+our $TestDriverDrive = "M:";
+our $TestDriverCmd = "$TestDriverDrive\\testdriver\\testdriver.cmd";
+our $TestDriverXML;
+
+# Publish details
+our $PublishServer = $ENV{'PublishLocation'};
+our $ProductType   = $ENV{'Type'};
+our $BuildNum      = $ENV{'BuildNumber'};
+our $LogsDir       = $ENV{'LogsDir'};
+
+# Epocwind.out
+my $tempDirLocation = $ENV{'TEMP'};
+
+#
+# CheckVars: ensures that the essential environment vars and directories exist
+#
+sub CheckVars
+{
+	print "\n** Settings **\n";
+	print "Build Drive                = $BuildDir\n";
+	print "Smoke Test Server Pool     = $serverpool\n";
+	print "Build Product              = $buildNo\n";
+	print "TestDriver Zip Location    = $TestDriverLocation\n";
+	print "TestDriver XML Location    = $TestDriverXML\n";
+	print "TestDriver Source Location = $sourceDir\n";
+	print "TestDriver Drive           = $TestDriverDrive\n";
+	print "SmokeTest working directory= $SmokeTestDir\n";
+	print "NAND build directory       = $NandDir\n";
+	
+	print "\n** Publishing Information **\n";
+	
+	print "Publish server = $PublishServer\n";
+	print "Product Type   = $ProductType\n";
+	print "Build Number   = $BuildNum\n";
+	
+	DieLog("CheckVars: \"Build Directory\" not defined") if !defined $BuildDir;
+	DieLog("CheckVars: \"Smoke Test Server Pool\" not defined") if !defined $serverpool;
+	DieLog("CheckVars: \"Build Product\" not defined") if !defined $buildNo;
+	DieLog("CheckVars: \"Publish server\" not defined") if !defined $PublishServer;
+	DieLog("CheckVars: \"Product Type\" not defined") if !defined $ProductType;
+	DieLog("CheckVars: \"Build Number\" not defined") if !defined $BuildNum;
+	DieLog("CheckVars: Directory \"SmokeTest working directory\" does not exist") if ! -e $SmokeTestDir;
+	DieLog("CheckVars: Directory \"TestDriver Zip Location\" does not exist") if ! -e $TestDriverLocation;
+}
+
+sub main
+{
+	print "\n\n*** START OF SMOKE TEST ***\n\n";
+
+	PrintDateTime();
+	
+	my ($iSourceDir,       $iTestSuite,   $iProduct, $iServerPool, $iProductType,
+	    $iPublishLocation, $iBuildNumber, $iXML,     $iUnzip,      $iBuildDrive, $iTDDrive) = @_;
+	
+	$TestSuite       = $iTestSuite           if defined $iTestSuite;
+	$BuildDir        = $iBuildDrive          if defined $iBuildDrive;
+	$sourceDir       = $BuildDir.$iSourceDir if defined $iSourceDir;
+	$buildNo         = $iProduct             if defined $iProduct;
+	$serverpool      = $iServerPool          if defined $iServerPool;
+	$ProductType     = $iProductType         if defined $iProductType;
+	$PublishServer   = $iPublishLocation     if defined $iPublishLocation;
+	$BuildNum        = $iBuildNumber         if defined $iBuildNumber;
+	$TestDriverDrive = $iTDDrive             if defined $iTDDrive;
+	
+	$SmokeTestDir    = "$sourceDir\\$TestSuite";
+	if (defined $iXML)
+	{
+		$TestDriverXML = $iXML;
+	}
+	else
+	{
+		$TestDriverXML = $SmokeTestDir."\\xml";
+	}
+	$NandDir = "$BuildDir\\src\\cedar\\generic\\base\\e32\\rombuild";
+	
+	CheckVars();
+	
+	# change dir to Smoketest dir
+	chdir "$SmokeTestDir" or DieLog("Can't cd to $SmokeTestDir");
+	
+	# unzip latest version of TD
+	if (defined $iUnzip)
+	{
+		unpackTestDriver2();
+	}
+	
+	# configure TD
+	configureTestDriver2();
+	
+	#
+	# Copy the correct configuration.cfg file
+	# But such source only exists for these products: 8.0a, 8.0b, 8.1a, 8.1b, 9.0, 9.1
+	#
+	print "\n#\n# Copy the correct configuration.cfg file\n#\n";
+	ExecCommand("COPY /Y $SmokeTestDir\\Group\\$buildNo\\configuration.cfg $SmokeTestDir\\Group\\configuration.cfg");
+	
+	#Read in hash of smoketests to be run for each product.
+	my ($iCfgFileLocation) = "$FindBin::Bin\\..\\..\\generic\\utils\\GenResult";
+	
+	#Read in the smoketest list from a cfg file
+	my $text = &FileRead::file_read ("$iCfgFileLocation\\Product.cfg");
+	#Search for an entry matching (At the beginning of line there should be 1 or more alphanumberic chars
+	#Followed by a "."(optional to allow codenames) followed by more alphanumberic chars followed by 0 or more spaces then an = then 0
+	#or more spaces then any amount of chars till the end of the line.
+	#8.1b = EMULATOR_WINSCW ARM4_LUBBOCK ARMV5_LUBBOCK
+	my %iProducts = $text =~ /^\s*(\w+\.?\w+)\s*=\s*(.+)$/mg ;
+	
+	#Get the list of platforms to be smoketested for the product.
+	#Need to turn the hash value into an array using split
+	my @iPlatforms = split (/ /,$iProducts{$buildNo});
+	#Build and Execute Test package for each platform as read from configuration file and create and zip rom.
+	ProcessPlatforms (@iPlatforms);
+	
+	#
+	# Build Test Package for ROMs
+	#
+	if ($buildNo eq '8.1a' || $buildNo eq '8.1b')
+	{
+		&SmokeTestSuite::BuildAndPackage("ARM4");
+	}
+	
+	if ($buildNo ne '8.1a')
+	{
+		&SmokeTestSuite::BuildAndPackage("ARMv5");
+	}
+	
+	#
+	# Find out which server to use
+	#
+	print "\n#\n# Find out which server to use\n#\n";
+	ProcessPlatformsforSmoketest(@iPlatforms);
+	
+	#
+	# End of Smoke Test
+	#
+	print "\n\n*** END OF SMOKE TEST ***\n\n";
+}
+	
+#
+# DieLog: Exits script and inserts a Remark in the build log, which will be picked up by htmlscanlog
+#
+sub DieLog
+{
+	die "\nREMARK: $_[0]\n $!\n\n\n";
+}
+
+
+#
+# Build and publish based on entries in the Product.cfg file
+#
+sub ProcessPlatforms 
+{
+
+my $i = 0;
+my @temp;
+my @iPlatforms = @_;
+
+foreach my $platform (@iPlatforms)
+ {  
+  undef @temp;
+  @temp = split (/_/,$iPlatforms[$i]);
+  $i++;
+  
+  if( $temp[0] eq "EMULATOR")
+  {
+	&SmokeTestSuite::BuildAndPublish("$temp[1]");
+	CheckPlatsecErrors("$temp[1]");
+  }
+  else
+  {
+		
+	if(3 == scalar(@temp)) # there are 3 arguments, so this will be a NAND ROM
+	{
+		if((lc($temp[1]) eq "h4hrp") && (lc($temp[2]) eq "nand\(dp\)" )) # H4HRP Demand Paging ROM options is -D_NAND2
+		{
+			&SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "pagedrom", "PlatSec", "$buildNo", "-D_NAND2" );
+		}
+		elsif((lc($temp[1]) eq "h4hrp") && (lc($temp[2]) eq "nand" )) # H4 options is -D_NAND2
+		{
+			&SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "-DRVCT", "PlatSec", "$buildNo", "-D_NAND2");
+		}
+		elsif(lc($temp[1]) eq "h2") # H2 options is -D_NAND# H2 option is NAND2 due to CR 0844 (Both H2 and H4 use -D_NAND2)
+                {
+			&SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "-DRVCT", "PlatSec", "$buildNo", "-D_NAND2");		
+		}
+		else	# Bad option entered
+		{
+			die "SmokeTest::ProcessPlatforms error: invalid board type entered: $temp[1]. Check that Product.cfg is correct.\n";
+		}		
+	}
+	else # This is the NOR ROM.
+	{
+		&SmokeTestROM::CreateAndZipROM("$temp[0]", "$temp[1]", "-DRVCT", "PlatSec", "$buildNo");
+	}
+  }
+  
+ }
+
+}
+
+#
+# Build and publish based on entries in the Product.cfg file
+#
+sub ProcessPlatformsforSmoketest
+{
+
+my $i = 0;
+my @temp;
+my @iPlatforms = @_;
+
+foreach my $platform (@iPlatforms)
+ {  
+    undef @temp;
+    @temp = split (/_/,$iPlatforms[$i]);
+    $i++;
+    if( $temp[0] eq "EMULATOR")
+    {
+        next;
+    }
+	my $mServ = &SmokeTestSuite::PollServers("$temp[1]");
+	unless (defined $mServ)
+    {
+        next;
+    }
+	if(3 == scalar(@temp))
+	{
+		if(lc($temp[2]) eq "nand\(dp\)" ) 
+		{
+		    &SmokeTestSuite::RunRemote("$temp[0]", "$temp[1]", $mServ, "NAND\(DP\)\\");
+		}
+        elsif(lc($temp[2]) eq "nand") 
+	    {
+		    &SmokeTestSuite::RunRemote("$temp[0]", "$temp[1]", $mServ, "NAND\\");
+	    }
+	}
+	else
+	{
+		&SmokeTestSuite::RunRemote("$temp[0]", "$temp[1]", $mServ);
+	}
+ }
+}
+ 
+#
+# Check for platsec errors - checks the epocwind.out on build machine
+#
+sub CheckPlatsecErrors
+{
+	print "\n";
+	print "#\n# Check for platsec errors\n#\n";
+	print "\n";
+	PrintDateTime();
+	
+	# open epocwind.out and parse for both errors and warnings
+	open EPOCWIND, "$tempDirLocation\\epocwind.out" or print "\nERROR: Cannot open EPOCWIND.OUT\n";
+	my @epocWind = <EPOCWIND>;
+	close EPOCWIND;
+	
+	foreach my $tempEW (@epocWind)
+	{
+		if ($tempEW =~ m/(\*PlatSec\* ERROR)(.*)/i)
+		{
+			print "\nERROR: $_[0] - $1$2";
+		}
+		elsif ($tempEW =~ m/(\*PlatSec\* WARNING)(.*)/i)
+		{
+			print "\nWARNING: $_[0] - $1$2";
+		}
+	}
+}
+
+#
+# Take TestDriver and unpack into a given location.
+#
+sub unpackTestDriver2()
+{
+	#
+	# Unzip TestDriver
+	#
+	print "\n#\n# Unzip TestDriver\n#\n";
+	PrintDateTime();
+	
+	# first remove the "old" version of test driver
+	print "\n";
+	ExecCommand("RMDIR $TestDriverDrive\\testdriver\\ /Q /S");
+	
+	# now unzip the latest version of testdriver which has been synced down
+	ExecCommand("%EPOCROOT%epoc32\\tools\\unzip.exe $TestDriverLocation\\TestDriver2.zip -d $TestDriverDrive\\testdriver\\");
+	
+	# now copy the latest version of testdriver_new.cmd which has been obtained
+	ExecCommand("COPY \\\\builds01\\devbuilds\\buildteam\\testdriverv2\\testdriver_new.cmd  $TestDriverCmd");
+	
+	# now copy the latest version of logging.properties which has been obtained
+	ExecCommand("COPY \\\\builds01\\devbuilds\\buildteam\\testdriverv2\\logging.properties  $TestDriverDrive\\testdriver\\");
+	
+    # 11-08-08 - additional steps required for SITK1.2 version of TD2
+    ExecCommand("MKDIR $TestDriverDrive\\testdriver\\eclipse\\links\\");
+
+    ExecCommand("COPY \\\\builds01\\devbuilds\\buildteam\\testdriverv2\\testdriver.link $TestDriverDrive\\testdriver\\eclipse\\links\\");
+	
+	#
+	# Unzip JRE v1.5
+	#
+	print "\n";
+	print "#\n# Unzip JRE 1.5 required by TestDriver v2\n#\n";
+	print "\n";
+	
+	ExecCommand("%EPOCROOT%epoc32\\tools\\unzip.exe \\\\builds01\\devbuilds\\BuildPCs\\Software\\JDK1.5.0_13\\jre1.5.zip -d $TestDriverDrive\\testdriver\\");
+
+}
+
+sub configureTestDriver2()
+{
+	#
+	# Configure TestDriver
+	#
+	print "\n";
+	print "#\n# Configure TestDriver\n#\n";
+	print "\n";
+	my $localtimes = localtime;
+	PrintDateTime();
+	
+	ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config -e $BuildDir\\
+								-x $TestDriverXML
+								-l $TestDriverDrive\\TestDriver\\Results
+								--source $sourceDir
+								-s smoketest
+								-r $TestDriverDrive\\TestDriver\\Repos
+								-c $TestDriverDrive\\TestDriver\\Results");
+
+	ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config --commdb overwrite");
+	ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config --bldclean off");
+
+	# platsec for > 9.x only
+	if ($buildNo ne "8.1a" && $buildNo ne "8.1b")
+	{
+		ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config -p ON");
+	}
+	
+	# Setup commdb for WINSCW smoketest
+	print "\n*** Setup commdb for WINSCW to use WinTAP ***\n";
+	
+	# export smoketest_commdb.xml to a place that ced.exe can see it
+	ExecCommand("copy $SmokeTestDir\\smoketest_commdb.xml $BuildDir\\epoc32\\WINSCW\\c\\");
+	ExecCommand("$BuildDir\\epoc32\\release\\WINSCW\\udeb\\ced.exe c:\\smoketest_commdb.xml");
+	
+	print "\n*** Confirm TestDriver Config ***\n";
+	ExecCommand("$TestDriverDrive\\testdriver\\testdriver.cmd config");
+	print "\n";
+}
+
+# ExecCommand
+#
+# Execute a system command, having first echoed it. Display and return the output of the command.
+#
+# Input: Command string (without final newline)
+#
+# Output: Command output (including STDERR) to STDOUT
+#
+# Return: Command output (including STDERR)
+#
+sub ExecCommand
+{
+    my $iCmd = shift;
+    print "\n================================================================\n";
+    print "Command: $iCmd\n";
+    print   "----------------------------------------------------------------\n";
+    my $iRet = `$iCmd 2>&1`;
+    chomp $iRet;
+    print "Return:  $iRet\n";
+    print   "================================================================\n";
+    return $iRet;
+}
+
+# PrintDateTime
+#
+# Print to STDOUT, Current Date and Time
+#
+# Input: none
+#
+# Output: text to STDOUT
+#
+sub PrintDateTime
+{
+    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
+    #### my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time);
+    $year += 1900;
+    $mon += 1;
+	printf "\n*** Current Time: %04d/%02d/%02d %02d:%02d:%02d ***\n", $year,$mon,$mday,$hour,$min,$sec;
+}
+
+1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SmokeTestClient.pl	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,80 @@
+# 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 "Eclipse Public License v1.0"
+# which accompanies 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 was born on 07/10/2004
+# 
+#
+
+#!/usr/bin/perl -w
+use strict;
+use SmokeTest;
+use Getopt::Long;
+
+# Process the commandline
+my ($iSourceDir, $iTestSuite, $iProduct, $iServerPool, $iProductType, $iPublishLocation, $iBuildNumber, $iXML, $iUnzip, $iBuildDrive, $iTDDrive) = ProcessCommandLine();
+
+&SmokeTest::main($iSourceDir, $iTestSuite, $iProduct, $iServerPool, $iProductType, $iPublishLocation, $iBuildNumber, $iXML, $iUnzip, $iBuildDrive, $iTDDrive);
+
+# ProcessCommandLine
+#
+# Description
+# This function processes the commandline
+
+sub ProcessCommandLine
+{
+  my ($iHelp);
+  
+  GetOptions('h' => \$iHelp, 'src=s' => \$iSourceDir, 'pool=s' => \$iServerPool, 'product=s' => \$iProduct, 'suite=s' => \$iTestSuite, 'type=s' => \$iProductType, 'publish=s' => \$iPublishLocation, 'build=s' => \$iBuildNumber, , 'xml=s' => \$iXML, 'unziptd' => \$iUnzip, 'builddrive=s' => \$iBuildDrive, 'tddrive=s' => \$iTDDrive);
+
+  if (($iHelp) || (!defined $iSourceDir) || (!defined $iTestSuite) || (!defined $iProduct) || (!defined $iBuildDrive))
+  {
+    Usage();
+  }
+  
+  return ($iSourceDir, $iTestSuite, $iProduct, $iServerPool, $iProductType, $iPublishLocation, $iBuildNumber, $iXML, $iUnzip, $iBuildDrive, $iTDDrive);
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage 
+{
+  print <<USAGE_EOF;
+
+  Usage: SmokeTestClient.pl [switches]
+
+  [Switches]
+  --suite Test Driver test suite (e.g. SmokeTest)
+  --src source code directory (e.g .\\src\\common\\testtools)
+  		[NOTE: The test suite directory should be located in this directory]
+  --product product being tested (e.g. 9.1)
+  --builddrive The drive where the source and epoc32 is (e.g. M:)
+  
+  [Optional]
+  -h help
+  --pool hash separated smoketest server pool (e.g. lon-sysbuild05\#lon-sysbuild06)
+  --type type of build, either Master or Symbian_OS_v8.1
+  --publish Publish server for the smoke test results (e.g. \\\\builds01)
+  --build Build Number (e.g. 03555_Symbian_OS_v9.1)
+  --xml TestDriver XML tree. Default is \\src\\common\\testtools\\SmokeTest\\xml.
+  --unziptd Installs a stable version of TestDriver from \\\\builds01\\devbuilds\\BuildTeam\\TestDriver
+  --tddrive The drive where testdriver is installed (default is C: and TD directory is c:\\testdriver)
+  
+  All the optional arguments are either specified by the user or assumed to be set as environment variables.
+  These environment variables can be found in SmokeTest.pm
+
+USAGE_EOF
+	exit 1;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SmokeTestROM.pm	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,259 @@
+# 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 "Eclipse Public License v1.0"
+# which accompanies 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 SmokeTestROM package contains all the subroutines needed to build a ROM for
+# automated smoke testing.
+# This script was born on 18/04/2005
+# Revision number 1: 11/08/2005
+# 
+#
+
+#!/usr/bin/perl -w
+
+package SmokeTestROM;
+use strict;
+
+# Define Core IMAGE file name as created by rombuild
+my $coreImage = "*techview.nand.img";
+
+# Define the target filename for the Core ROM
+my $newCoreImage = "core.img";
+
+# Define ROFS IMAGE file name as created by rombuild
+my $ROFSImage = "*techview.nand.rofs.img";
+
+# Define the target file name for the ROFS ROM
+my $newROFSImage = "rofs1.img";
+
+# Define NAND image file name.
+my $nandImage = "*ARMV5.IMG";
+#
+# CR 0844 (Both H2 and H4 use -D_NAND2)
+# PrepareNANDROM  - subroutine to create the NAND ROM for smoke testing; zero arguments
+# USAGE: PrepareNANDROM("h2"); 
+# USAGE: PrepareNANDROM("h4hrp"); 
+#
+sub PrepareNANDROM
+{
+	my ($arg) = @_; # Grab the first and only argument
+	
+	# Change dir to NAND Loader directory
+	chdir "$SmokeTest::NandDir" or &SmokeTest::DieLog("Can't cd to $SmokeTest::NandDir");
+	
+	if(lc($arg) eq "h2") # Here we are in the H2 NAND case
+	{
+		# Run the rom command to create the image ... H2 also to use -D_NAND2
+		SmokeTest::ExecCommand ("rom -v=h2 -i=armv5 -t=nandtest_load_noext -d=_NAND2 -b=urel");
+	}
+	elsif(lc($arg) eq "h4hrp") # Here we are in the H4 NAND case
+	{
+		SmokeTest::ExecCommand ("rom -v=h4hrp -i=armv5 -t=nandtest_load_noext -d=_NAND2 -b=urel");
+	}
+	
+	# Change directory to Smoketest directory
+	chdir "$SmokeTest::SmokeTestDir" or &SmokeTest::DieLog("Can't cd to $SmokeTest::SmokeTestDir");
+	
+	# Get the filename of the NAND image file
+	my @NANDname = glob("$SmokeTest::NandDir\\$nandImage");
+	
+	# There should be exactly one file matching $nandImage. If not give warning.
+	if(@NANDname != 1)
+	{
+		print "PrepareNANDROM: warning: " . scalar(@NANDname) . " files matching $nandImage in $SmokeTest::NandDir\\: [@NANDname].\n";
+	}
+	
+	# Attempt to delete any files already in this directory left over from previous runs
+	print "PrepareNANDROM: attempting to delete any debris from the last run:\n";
+	SmokeTest::ExecCommand ("DEL /Q $nandImage");
+
+	for my $filename(@NANDname)
+	{
+		if((lc($arg) eq "h2") && ($filename =~ /h2/i)) # This is the H2 NAND case, so copy H2 image
+		{
+			# Copy $nandImage to the current working directory
+			print "PrepareNANDROM: copying $filename to .\n";
+			SmokeTest::ExecCommand ("COPY $filename");
+		}
+		elsif((lc($arg) eq "h4hrp") && ($filename =~ /h4hrp/i)) # This is the H4 NAND case, so copy H4 image
+		{
+			# Copy $nandImage to the current working directory
+			print "PrepareNANDROM: copying $filename to .\n";
+			SmokeTest::ExecCommand ("COPY $filename");
+		}
+	}
+}
+
+#
+# CR 0844 (Both H2 and H4 use -D_NAND2)
+# CreateAndZipROM creates the various ROMS; up to 5 arguments.
+# Usage:
+# CreateAndZipROM("ARMV5", "lubbock", "-DRVCT", "PlatSec");
+# CreateAndZipROM("ARMV5", "h2", "-DRVCT", "PlatSec");
+# CreateAndZipROM("ARMV5", "h2", "-DRVCT", "PlatSec", "-D_NAND2");
+# CreateAndZipROM("ARMV5", "h4hrp", "-DRVCT", "PlatSec", "-D_NAND2");
+#
+sub CreateAndZipROM
+{
+	my @args = @_; # Array to hold the arguments
+	
+	# This sixth argument $args[5] determines whether to build the NAND version
+	# of the ROM or not. Set it equal to the empty string if the argument
+	# isn't defined otherwise it should equal the argument
+	my $nandROM;
+	if(defined $args[5])
+	{
+		if($args[5] =~  /-D_NAND/)
+		{
+			$nandROM = $args[5];
+		}
+		else
+		{
+			die "Invalid final argument in CreateAndZipROM. Exiting.\n";
+		}
+	}
+	else
+	{
+		$nandROM = "";
+	}
+	
+	print "\n";
+	# 
+	# Build ROM with STAT run automatically
+	#
+	print "\n";
+	print "#\n# Build $args[0] $args[1] ROM with STAT run automatically\n#\n"; 
+	print "\n";
+	SmokeTest::PrintDateTime();
+	
+	my $eabi = "";
+	if ($args[0] eq "ARMV5")
+	{
+		$eabi = "-D_EABI=$args[0]";
+	}
+
+    my ($iProductNum,$buildrom);
+	$iProductNum = $args[4];
+	
+	if ($iProductNum eq 'Future' || $iProductNum  >= 9.5 || $iProductNum eq 'tb92' || $iProductNum eq 'tb101sf')
+	{
+####????DavidZjang#$buildrom = SmokeTest::ExecCommand ("buildrom -D_STARTUPMODE2 -D_EABI=ARMV5 -fm=\\epoc32\\rom\\include\\featuredatabase.xml h4hrp techview statauto.iby -osys$rom.bin");
+####????MCL########$buildrom = SmokeTest::ExecCommand ("buildrom -D_STARTUPMODE2 $eabi -fm=\\epoc32\\rom\\include\\featuredatabase.XML GTC_Standard statauto.iby testconfigfileparser.iby");
+	    $buildrom = SmokeTest::ExecCommand ("buildrom -D_STARTUPMODE2 $eabi -fm=\\epoc32\\rom\\include\\featuredatabase.XML GTC_Standard_H4 statauto.iby testconfigfileparser.iby");
+	}
+	else
+	{
+	    $buildrom = SmokeTest::ExecCommand ("buildrom -D_STARTUPMODE2 $eabi -fr=\\epoc32\\rom\\include\\featureUIDs.XML GTC_Standard_H4 statauto.iby testconfigfileparser.iby");
+	}
+	print $buildrom;
+	
+	if ( ($buildrom =~ m/rombuild.*failed/i) )
+	{
+		print "\n*** Error In Smoke Test ***\n Building the ROM failed\n$!\n";
+		#&SmokeTest::DieLog("Error In Smoke Test: Building the ROM failed");
+	} 
+	else 
+	{
+		print "\n*** ROM built successfully ***\n";	
+	}
+	
+	if ($nandROM =~ /-D_NAND/)
+	{
+		# Need to rename each on individually as there are several files ending in ".img"
+		print "\n";
+		print "#\n# Renaming NAND ROMs\n#\n"; 
+		print "\n";
+		SmokeTest::ExecCommand ("MOVE /Y $ROFSImage $newROFSImage");
+		SmokeTest::ExecCommand ("MOVE /Y $coreImage $newCoreImage");
+
+		# Copy each of the image files to the \epoc32\rom directory
+		print "\n";
+		print "#\n# Copying NAND ROMs\n#\n"; 
+		print "\n";
+		SmokeTest::ExecCommand ("COPY $newROFSImage \\epoc32\\rom\\");
+		SmokeTest::ExecCommand ("COPY $newCoreImage \\epoc32\\rom\\");
+		
+		# Delete the images
+		print "\n";
+		print "#\n# Deleting images\n#\n"; 
+		print "\n";
+		SmokeTest::ExecCommand ("DEL *.img");
+
+#  passing $args[1] i.e. h2 / h4hrp to PrepareNANDROM due to CR 0844 (Both H2 and H4 use -D_NAND2)
+    	&PrepareNANDROM("$args[1]");
+	}
+	
+	# Rename the IMG file to sys$rom.bin
+	my $ImgDir = SmokeTest::ExecCommand ("DIR *.img");
+		
+	$ImgDir =~ /(\S+\.img)/i;
+		
+	#&SmokeTest::DieLog("Building ROMs failed: Cannot find .IMG file") unless defined $1;
+	print "Name of ROM : $1 \n";
+	SmokeTest::ExecCommand ("MOVE /Y $1 sys\$rom.bin");
+	print "\n";
+		
+	# 
+	# ZIP ROM using \epoc32\tools\zip.exe
+	# 
+	print "\n";
+	print "#\n# ZIP ROM using \\epoc32\\tools\\zip.exe\n#\n";
+	print "\n";
+	SmokeTest::PrintDateTime();
+	
+	# Now zip the file
+	my $zipresult = SmokeTest::ExecCommand ("$SmokeTest::BuildDir$ENV{EPOCROOT}epoc32\\tools\\zip.exe -Tv sys\$rom sys\$rom.bin");
+	print "\n";
+	
+	# Test for zip errors
+	if ($zipresult =~ m/No errors detected/i) # Good case: no errors detected.
+	{
+		print "*** ROM zip successful: no errors detected ***\n";	
+	}
+	elsif ($zipresult =~ m/zip error/i) # Zip error
+	{
+		print "*** Error In Smoke Test ***\n Zipping the ROM failed $!\n";
+		#&SmokeTest::DieLog("Error In Smoke Test: Zipping the ROM failed");
+	}
+	else # Worst case
+	{
+		print "*** Error In Smoke Test ***\n Zipping unable to start $!\n";
+	}
+	
+	# Form the string for the temporary zip file locations
+	my $tempZipLocation = "$SmokeTest::SmokeTestDir\\$args[0]\\$args[1]";
+	if ($nandROM =~ /-D_NAND/) # Add \NAND folder if a NAND ROM is being built
+	{
+		
+		if ($args[2] eq "pagedrom") # Add \NAND_DP folder if a Demand Paging NAND ROM is being built
+		{
+			$tempZipLocation .= "\\NAND\(DP\)";
+		}
+		else
+		{
+			$tempZipLocation .= "\\NAND";
+		}
+	}
+
+	# Make the temp zip folder
+	SmokeTest::ExecCommand ("MKDIR $tempZipLocation");
+	print "\n";
+	
+	# Copy the ROM to the appropriate directory to be copied later
+	SmokeTest::ExecCommand ("MOVE /Y sys\$rom.zip $tempZipLocation\\sys\$rom.zip");
+	
+	print "\n";
+	
+	SmokeTest::PrintDateTime();
+}
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SmokeTestServer.pl	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,334 @@
+# 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 "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# TestServer.pl 
+# This script was born on 19/10/2004
+# 
+#
+
+use strict;
+
+my $jobsfolder = "d:\\Jobs\\";
+
+# Loop forever
+while (1)
+{
+	open LogFile, ">>d:\\SmokeTestServerLog.txt" or die "Cannot open log file: $!";
+	
+	print "\n***********************\n";
+	print "\n*** START PUBLISHER ***\n";
+	print "\n***********************\n";
+	print "\n";
+	print LogFile "\n***********************\n";
+	print LogFile "\n*** START PUBLISHER ***\n";
+	print LogFile "\n***********************\n";
+	print LogFile "\n";
+	
+	my $localtimes = localtime;
+	print "\n*** Current Time: $localtimes ***\n";
+	print LogFile "\n*** Current Time: $localtimes ***\n";
+	
+	# 
+	# Check if there are any results ready for publishing
+	#
+	print "\n";
+	print "#\n# Check if there are any results ready for publishing\n#\n"; 
+	print "\n";	
+	print LogFile "\n";
+	print LogFile "#\n# Check if there are any results ready for publishing\n#\n"; 
+	print LogFile "\n";	
+	
+	opendir JobDir, $jobsfolder or die "Cannot open jobs dir $jobsfolder: $!";
+		
+	my @jobs = readdir(JobDir);
+	
+	# to remove "." and ".." from this list
+	shift @jobs;
+	shift @jobs;
+	
+	if (!scalar(@jobs))
+	{
+		print "\nNo Jobs to publish\n";
+		print LogFile "\nNo Jobs to publish\n";
+	}
+	else
+	{
+		# 
+		# Loop though each directory and publish logs
+		#
+		print "\n";
+		print "#\n# Loop though each directory and publish logs\n#\n"; 
+		print "\n";
+		print LogFile "\n";
+		print LogFile "#\n# Loop though each directory and publish logs\n#\n"; 
+		print LogFile "\n";
+			
+		foreach my $name (sort { $a <=> $b } @jobs)
+		{
+			if ( -d $jobsfolder.$name)
+			{
+				print "\n*** Found Job: $name ***\n";
+				print LogFile "\n*** Found Job: $name ***\n";
+				
+				# Check to see if job has been completed.
+				if (isJobFinished($name))
+				{
+					# 
+					# Publish the results
+					#
+					print "\n";
+					print "#\n# Publish the results\n#\n"; 
+					print "\n";
+					print LogFile "\n";
+					print LogFile "#\n# Publish the results\n#\n"; 
+					print LogFile "\n";
+					
+					my $publishfile = $jobsfolder.$name."\\publish.txt";
+					
+					if (-r $publishfile)
+					{
+						open (PUBLISH, $publishfile) or GoNext("Cannot find publish details for $name");
+						my $count = 0;
+						my $index = 0;
+						while (my $publishlocation = <PUBLISH>)
+						{
+							chomp $publishlocation;
+							
+							$index++;
+							
+							print "\nPublish Location = $publishlocation\n";
+							print LogFile "\nPublish Location = $publishlocation\n";
+							
+							`mkdir $publishlocation`; # or GoNext("$publishlocation\\$name\\");
+							
+							my $lookIn = "$jobsfolder$name\\output";
+							my ($source,$runid,$buildname) = getSourceDir($lookIn);
+							
+							my $srcdir = $source."\\xml";
+							my $trgtdir= $publishlocation."xml\\";
+							
+							my $xcopycmd= "xcopy /C /Y /E $srcdir $trgtdir ";
+							print `$xcopycmd`;
+							
+							#
+							# Copy the contents of Output and reports -
+							#
+							# runXX_<snapshot>_SymbianOS_vYY.xml/html to <snapshot>_Symbian_OS_vYY.xml/html
+							#
+							
+							my $xmlfile   = "$source\\run".$runid."_".$buildname."\.xml";
+							my $htmlfile  = "$source\\run".$runid."_".$buildname."\.html";
+							
+							if (-e $xmlfile)  {
+								
+								print "copy $xmlfile to $buildname.xml";
+								system "copy $xmlfile $publishlocation\\$buildname.xml";
+							}
+							
+							if (-e $htmlfile)  {
+								
+								print "copy $htmlfile to $buildname.html";
+								system "copy $htmlfile $publishlocation\\$buildname.html";
+							}
+							
+							print "\nNumber of Files Copied = $1\n" if $xcopycmd =~ m/(\d+)\s\w+/;
+							print LogFile "\nNumber of Files Copied = $1\n" if $xcopycmd =~ m/(\d+)\s\w+/;
+							
+							$count += $1;
+							
+							# The input should be copied onto \\devbuilds\master\.. but not \\devbuilds\logs\master\..
+							if ($index < 2)
+							{
+								print "\n\nCopy the Input\n";
+								$source = "$jobsfolder$name\\input\\*";
+								
+								# Copy the contents of Input
+								print "\ncmd: xcopy /C /Y /E $source $publishlocation 2>&1\n";
+								print LogFile "\ncmd: xcopy /C /Y /E $source $publishlocation 2>&1\n";
+								my $xcopy = `xcopy /C /Y /E $source $publishlocation 2>&1`;
+								print $xcopy;
+								
+								print "\nNumber of Files Copied = $1\n" if $xcopy =~ m/(\d+)\s\w+/;
+								print LogFile "\nNumber of Files Copied = $1\n" if $xcopy =~ m/(\d+)\s\w+/;
+								$count += $1;
+							}
+						}						
+						close Publish;
+						
+						print "\nTotal Number of files copied = $count\n";
+						print LogFile "\nTotal Number of files copied = $count\n";
+						
+						# Minimum 3 files have to be copied - Trace.txt, sys$rom.bin and armX.tpkg
+						if ($count >= 3)
+						{
+							# it is fine to delete the jobs dir
+							print "\ncmd: rd $jobsfolder$name /Q /S  2>&1\n";
+							print LogFile "\ncmd: rd $jobsfolder$name /Q /S  2>&1\n";
+							print `rd $jobsfolder$name /Q /S  2>&1`;
+						}
+					}
+					else
+					{
+						print "\n*** Error publishing results ***\n Cannot open publish file: $jobsfolder"."$name"."\\publish.txt\n";
+						print LogFile "\n*** Error publishing results ***\n Cannot open publish file: $jobsfolder"."$name"."\\publish.txt\n";
+					}
+				}
+				else
+				{
+					print "\nThe Job $name is either still running or has encountered an error\n";				
+					print LogFile "\nThe Job $name is either still running or has encountered an error\n";				
+				}
+			}
+			else
+			{
+				print "*** Error ***\nDir does not exist! $jobsfolder.$name\n";
+				print LogFile "*** Error ***\nDir does not exist! $jobsfolder.$name\n";
+			}
+		}
+	}
+	close JobDir;
+	
+	my $localtimes = localtime;
+	print "\n*** Current Time: $localtimes ***\n";
+	print LogFile "\n*** Current Time: $localtimes ***\n";
+	
+	print "\n";
+	print "\n*********************\n";
+	print "\n*** END PUBLISHER ***\n";
+	print "\n*********************\n";
+	print "\n";
+	print "\n";
+	print LogFile "\n";
+	print LogFile "\n*********************\n";
+	print LogFile "\n*** END PUBLISHER ***\n";
+	print LogFile "\n*********************\n";
+	print LogFile "\n";
+	print LogFile "\n";
+	
+	close LogFile;
+	sleep 900;
+}
+
+sub GoNext
+{
+	print "\n*** Error in Publisher ***\n $_[0] $!\n";
+	print LogFile "\n*** Error in Publisher ***\n $_[0] $!\n";
+	next;
+}
+
+# identify if a job has finished
+sub isJobFinished($) {
+	
+	my $jobid = shift;
+	my @cmd_out = `testdriver.cmd jobstatus -j $jobid 2>&1`;
+	
+	foreach (@cmd_out) {
+		if (m/completed/) { return 1; }
+	}
+	
+	return 0;
+}
+
+sub getSourceDir($)
+{
+	my $source = shift;
+	my $runid  = 0;
+	my $buildname;
+	
+	#
+	# Find the correct directory to publish
+	#
+	
+	if (opendir RESULTS, $source)
+	{	
+		my @dirArray = readdir(RESULTS);
+		
+		#print "@results";	
+		# to remove "." and ".." from this list
+		shift @dirArray;
+		shift @dirArray;
+		
+		if (!scalar(@dirArray))
+		{
+			print "REMARK: The result for $_[0] has an empty $source directory";
+			return;
+		}
+		else
+		{
+			print "\nContents of $source = @dirArray\n";
+			$source .= "\\$dirArray[0]"; 
+			# dirArray should always have just the one subdir - 0XXXX_Symbian_OS_vX.X
+			
+			$buildname = $dirArray[0];
+	
+			if (opendir tempDir, "$source")
+			{
+				# to remove "." and ".." from this list
+				my @dirArray = readdir(tempDir);
+				shift @dirArray;
+				shift @dirArray;
+				
+				print "\nContents of $source = @dirArray\n";
+				
+				foreach my $directory (@dirArray)
+				{
+					if ($directory =~ /(?:$_[0])/i)
+					{
+						$source .= "\\$directory";
+						
+						# added this to remove udeb/xx
+						if (opendir tempDir, "$source")
+						{
+							# to remove "." and ".." from this list
+							@dirArray = readdir(tempDir);
+							shift @dirArray;
+							shift @dirArray;
+				
+							print "\nContents of $source = @dirArray\n";
+				
+							foreach my $directory (@dirArray)
+							{
+								if ($directory =~ /(udeb|urel)/i)
+								{
+									$source .= "\\$directory";
+									if (opendir tempDir, "$source")
+									{
+										# to remove "." and ".." from this list
+										@dirArray = readdir(tempDir);
+										shift @dirArray;
+										shift @dirArray;
+				
+										print "\nContents of $source = @dirArray\n";
+				
+										foreach my $directory (@dirArray)
+										{
+											if ($directory =~ /(^[0-9]+)/i)
+											{
+												$source .= "\\$directory";
+												$runid = $directory;
+												last;
+											}
+										}
+									}
+									last;
+								}
+							}
+						}
+						
+					}
+				}
+			}
+		}
+	}
+	return ($source, $runid, $buildname);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SmokeTestSuite.pm	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,501 @@
+# 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 "Eclipse Public License v1.0"
+# which accompanies 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 SmokeTestSuite package contains subroutines that are needed to build a 
+# testdriver test suite.
+# This script was born on 18/04/2005
+# 
+#
+
+#!/usr/bin/perl -w
+package SmokeTestSuite;
+use strict;
+
+my $servicename;
+
+#
+# BuildAndPackage: Used to create a test package for remote execution on the ROM
+#
+sub BuildAndPackage
+{
+	#
+	# Build Test Package for $_[0]
+	#
+	print "\n#\n# Build Test Package for $_[0]\n#\n";
+	SmokeTest::PrintDateTime();
+	my $testbuild = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd build -p $_[0] -b udeb -s $SmokeTest::TestSuite");
+
+	# now check for results
+	$testbuild =~ m/fail\:\s(\d+)\s\%/i;
+	
+	if ( ($testbuild =~ m/\*\*error\:/i) || $1 == 100 )
+	{
+		print "\nREMARK: Smoke Test *** Building the Test failed $!\n";
+		#&SmokeTest::DieLog("Error In Smoke Test: Building the Test failed");
+	} 
+	else 
+	{
+		print "\n*** Test Building successful ***\n";	
+	}
+	
+	SmokeTest::PrintDateTime();
+	
+	my $testpackage = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd package -p $_[0] -b udeb -s $SmokeTest::TestSuite --tp $SmokeTest::SmokeTestDir\\$_[0].tpkg");
+	print "\n";
+	
+	if (($testpackage =~ m/\*\*error/i))
+	{
+		print "\nREMARK: Smoke Test *** Building the Test Package failed\n\"$1\"\n";
+		#&SmokeTest::DieLog("Error In Smoke Test: Building the Test Package failed");
+	} 
+	else 
+	{
+		print "\n*** Building the Test Package successful ***\n";	
+	}
+	
+	SmokeTest::PrintDateTime();
+}
+
+#
+# BuildAndPublish: used to build and test the smoketest test suite on an Emulator
+#
+sub BuildAndPublish
+{
+	my $runid = 0;
+	my $buildname;
+	
+	#
+	# Build Test Suite for $_[0]
+	#
+	print "\n#\n# Build Test Suite for $_[0]\n#\n";
+	SmokeTest::PrintDateTime();
+	my $testbuildwinscw = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd build -p $_[0] -b udeb -s $SmokeTest::TestSuite");
+
+	# now check for results
+	$testbuildwinscw =~ m/fail\:\s(\d+)\s\%/i;
+	
+	if ( ($testbuildwinscw =~ m/\*\*error\:/i) || $1 == 100 )
+	{
+		print "\nREMARK: Smoke Test *** Building the Test for $_[0] failed $!\n";
+		#&SmokeTest::DieLog("Error In Smoke Test: Building the Test failed");
+	} 
+	else 
+	{
+		print "\n*** Test Build successful ***\n";	
+	}
+	
+	#
+	# Run Test Suite for $_[0]
+	#
+	print "\n";
+	print "#\n# Run Test Package for $_[0]\n#\n";
+	print "\n";
+	SmokeTest::PrintDateTime();
+	
+	SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd run -p $_[0] -b udeb -s $SmokeTest::TestSuite");
+	
+	SmokeTest::PrintDateTime();
+	
+	#
+	# Publish results of emulator onto publish server
+	#
+	print "\n";
+	print "#\n# Publish results of emulator onto publish server\n#\n";
+	print "\n";
+	
+	#
+	# Find the correct directory to publish
+	#
+	my $source = "$SmokeTest::TestDriverDrive\\TestDriver\\Results";
+	if (opendir Results, $source)
+	{	
+		my @dirArray = readdir(Results);
+		
+		#print "@results";	
+		# to remove "." and ".." from this list
+		shift @dirArray;
+		shift @dirArray;
+		
+		if (!scalar(@dirArray))
+		{
+			print "REMARK: The emulator for $_[0] has an empty $source directory";
+			return;
+		}
+		else
+		{
+			print "\nContents of $source = @dirArray\n";
+			$source .= "\\$dirArray[0]"; 
+			# dirArray should always have just the one subdir - 0XXXX_Symbian_OS_vX.X
+			
+			$buildname = $dirArray[0];
+			
+			if (opendir tempDir, "$source")
+			{
+				# to remove "." and ".." from this list
+				@dirArray = readdir(tempDir);
+				shift @dirArray;
+				shift @dirArray;
+				
+				print "\nContents of $source = @dirArray\n";
+				
+				foreach my $directory (@dirArray)
+				{
+					if ($directory =~ /(?:$_[0])/i)
+					{
+						$source .= "\\$directory";
+						
+						# added this to remove udeb/xx
+						if (opendir tempDir, "$source")
+						{
+							# to remove "." and ".." from this list
+							@dirArray = readdir(tempDir);
+							shift @dirArray;
+							shift @dirArray;
+				
+							print "\nContents of $source = @dirArray\n";
+				
+							foreach my $directory (@dirArray)
+							{
+								if ($directory =~ /(udeb|urel)/i)
+								{
+									$source .= "\\$directory";
+									if (opendir tempDir, "$source")
+									{
+										# to remove "." and ".." from this list
+										@dirArray = readdir(tempDir);
+										shift @dirArray;
+										shift @dirArray;
+				
+										print "\nContents of $source = @dirArray\n";
+				
+										my @iNumericDirList = ();
+										foreach my $directory (@dirArray)
+										{
+											if ($directory =~ /(^[0-9]+)/i)
+											{
+    											push @iNumericDirList, $directory;
+											}
+										}
+									    @iNumericDirList = sort { $b <=> $a } @iNumericDirList;
+									    $runid = $iNumericDirList[0];
+                                        $source .= "\\$runid";
+									    last;
+									}
+									last;
+								}
+							}
+						}
+						
+					}
+				}
+				
+				print "\nThe final source directory = $source\n";
+			}
+			else
+			{
+				print "REMARK: The emulator for $_[0] has an empty $source directory";
+				return;
+			}
+		}
+		my $emulatorpublish = "$SmokeTest::PublishServer\\$SmokeTest::ProductType\\$SmokeTest::BuildNum\\logs\\SmokeTest\\Emulator\\$_[0]";
+		
+		SmokeTest::ExecCommand ("MKDIR $emulatorpublish"); # or GoNext("$publishlocation\\$name\\");
+		
+		SmokeTest::ExecCommand ("XCOPY /C /Y /E $source\\xml $emulatorpublish\\xml\\");
+		
+		#
+		# Copy runXX_<snapshot>_SymbianOS_vYY.xml/html to <snapshot>_Symbian_OS_vYY.xml/html
+		#
+		
+		my $xmlfile   = "$source\\run".$runid."_".$buildname."\.xml";
+		my $htmlfile  = "$source\\run".$runid."_".$buildname."\.html";
+		
+		if (-e $xmlfile)
+		{
+			SmokeTest::ExecCommand ("COPY $xmlfile $emulatorpublish\\$buildname.xml");
+		}
+		
+		if (-e $htmlfile)
+		{
+			SmokeTest::ExecCommand ("COPY $htmlfile $emulatorpublish\\$buildname.html");
+		}
+		
+		#
+		# Publish results of emulator onto logs dir
+		#
+		print "\n";
+		print "#\n# Publish results of emulator onto Logs Dir\n#\n";
+		print "\n";
+		
+		my $emulatorpublish = "$SmokeTest::LogsDir\\SmokeTest\\Emulator\\$_[0]\\";
+		
+		SmokeTest::ExecCommand ("MKDIR $emulatorpublish"); # or GoNext("$publishlocation\\$name\\");
+		
+		SmokeTest::ExecCommand ("XCOPY /C /Y /E $source $emulatorpublish");
+	}
+	else
+	{
+		print "REMARK: Cannot open dir $source: $!";
+		return;
+	}
+	SmokeTest::PrintDateTime();
+}
+
+#
+# PollServers: Polls all the servers from the Pool and picks out the one with the shortest queue.
+#
+sub PollServers
+{
+	#
+	# Parse ENV and create an array of smoketest servers for $_[0]
+	#
+	print "\n";
+	print "#\n# Parse ENV and create an array of smoketest servers for $_[0]\n#\n";
+	print "\n";
+	SmokeTest::PrintDateTime();
+	
+	if (($_[0] eq "Lubbock") || ($_[0] eq "LUBBOCK"))
+	{
+		$SmokeTest::servicename = "RemoteTestDriverLubbock";
+	}
+	elsif ($_[0] eq "H2")
+	{
+		$SmokeTest::servicename = "RemoteTestDriverH2";
+	}
+        elsif ($_[0] eq "H4HRP")
+	{
+		$SmokeTest::servicename = "RemoteTestDriverH4HRP";
+	} 
+	else
+	{
+		&SmokeTest::DieLog("Cannot poll serverpool for pool \"$_[0]\"");
+	}
+	
+	my @servers = split /\#/, $SmokeTest::serverpool;
+	if (@servers < 1)
+	{
+		&SmokeTest::DieLog("*** Error In Smoke Test ***\nNo SmokeTest Servers specified for $_[0]$!\n");
+	}
+	else
+	{
+		print "\n*** Retrieved Pool of Smoke Test Servers from ENV for $_[0]***\n";
+	}
+	
+	#
+	# Poll each of the smoke test servers and parse the results
+	#
+	print "\n";
+	print "#\n# Poll each of the smoke test servers and parse the results\n#\n";
+	print "\n";
+	
+	my %serverlist;
+	
+    print "Checking TestDriver Version\n";
+    SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd version");
+
+	foreach my $server (@servers)
+	{
+		print "Polling Server: $server\n";
+        my $masterstatus = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd masterstatus --srv //$server/$SmokeTest::servicename");
+		
+		my $value = -2;
+		if ($masterstatus =~ m/Master: TestDriver is currently (....)/i)
+		{
+			if ($1 eq 'free')
+			{
+				#print "Free!\n";
+				$value = 0;
+			}
+			else
+			{
+				$masterstatus =~ m/are\s+(\w+)\s+jobs/i;
+				if ($1 =~ m/\D+/)
+				{
+					$value = 1;
+				}
+				else
+				{
+					$value = $1 + 1;
+				}
+			}
+		}
+		else
+		{
+			# The master is not running a service
+			$value = -1;
+		}
+		$serverlist{$server} = $value;
+		print "\n"; 
+	}
+	
+	#
+	# Decide which server to use
+	#
+	print "\n";
+	print "#\n# STEP8 Decide which server to use\n#\n";
+	print "\n";
+	
+	my $masterserver;
+	
+	# Loop through first time only to print out all the available servers
+	print "\nAvailable Servers\n";
+	foreach my $servername (sort { $serverlist{$a} <=> $serverlist{$b} } keys %serverlist)
+	{
+		print "\n$servername : number in queue are $serverlist{$servername}\n";
+	}
+	
+	# Loop through second time to actually select the correct server
+	foreach my $servername (sort { $serverlist{$a} <=> $serverlist{$b} } keys %serverlist)
+	{
+		if ($serverlist{$servername} > -1)
+		{
+			$masterserver = $servername;
+			last;
+		}
+	}
+	
+	if (defined $masterserver)
+	{
+		print "\n*** The Smoke Test Server to be used for $_[0] is $masterserver ***\n";
+	}
+	else
+	{
+		print "\nREMARK: Smoke Test *** No available Smoke Test Servers for $_[0] \n";
+		#&SmokeTest::DieLog("Error In Smoke Test: No available Smoke Test Servers for $_[0]");
+	}
+	SmokeTest::PrintDateTime();
+	return $masterserver;
+}
+
+#
+# Usage: RunRemote(Architecture, Testing Board, Server)
+#
+sub RunRemote
+{
+	my $masterserver = $_[2];
+	
+		
+	#
+	# Call TestDriver runremote for $_[0]
+	#
+	print "\n";
+	print "#\n# Call TestDriver runremote for $_[0]\n#\n";
+	print "\n";
+	SmokeTest::PrintDateTime();
+	
+	my $tempZipLocation = "$SmokeTest::SmokeTestDir\\$_[0]\\$_[1]";
+	if ($_[3] eq "NAND\\")
+	{
+		$tempZipLocation .= "\\NAND";
+	}
+	elsif ($_[3] eq "NAND\(DP\)\\")
+	{
+                $tempZipLocation .= "\\NAND\(DP\)";
+	}
+
+	SmokeTest::ExecCommand ("COPY /Y $tempZipLocation\\sys\$rom.zip $SmokeTest::SmokeTestDir\\sys\$rom.zip");
+	
+	# Decide whether this is a platsec ROM or not
+	my $platsec;
+	if ($SmokeTest::buildNo eq "9.1" || $SmokeTest::buildNo eq "9.2" || $SmokeTest::buildNo eq "9.3" || $SmokeTest::buildNo eq "Future" || $SmokeTest::buildNo eq "9.4" || $SmokeTest::buildNo eq "9.5" || $SmokeTest::buildNo eq "9.6" || $SmokeTest::buildNo eq "tb92" || $SmokeTest::buildNo eq "tb101sf")
+	{
+		$platsec = "ON";
+	}
+	else
+	{
+		$platsec = "OFF";
+	}
+	
+	# calling testdriver for $_[0]
+	my $runremote = SmokeTest::ExecCommand ("$SmokeTest::TestDriverCmd runremote -m async -i $SmokeTest::SmokeTestDir --tp $_[0].tpkg -r sys\$rom.zip --srv //$masterserver/$SmokeTest::servicename --platsec $platsec --testexec ON");
+	
+	#
+	# Parse output to get the job number or error
+	#
+	print "\n";
+	print "#\n# Parse output to get the job number or error\n#\n";
+	print "\n";
+	
+	my $jobid;
+	
+	if ($runremote =~ m/job id/i)
+	{
+		$runremote =~ m/job id: (\d+)/i;
+		$jobid = $1;
+		print "\n*** Job submitted successfully ***\n\nJob Id = $jobid\n";
+	}
+	else
+	{
+		print "\nREMARK: Smoke Test Job Submission failed\n";
+		#&SmokeTest::DieLog("Error In Smoke Test: Submitting the Job failed");
+		return;
+	}
+	
+	#
+	# Create a text file with publish details
+	#
+	print "\n";
+	print "#\n# Create a text file with publish details\n#\n";
+	print "\n";
+	
+	my $publishstring;
+	
+	$publishstring = "Publish: $SmokeTest::PublishServer\\$SmokeTest::ProductType\\$SmokeTest::BuildNum\\logs\\Smoketest\\$_[0]\\$_[1]\\";
+	print "$publishstring";
+	
+	if ( (defined $SmokeTest::PublishServer) && (defined $SmokeTest::ProductType) && (defined $SmokeTest::BuildNum) )
+	{
+		open PublishFile, ">$_[0]$_[1].txt" or &SmokeTest::DieLog("Cannot open File $_[0]$_[1].txt: $!\n");
+		$publishstring = "$SmokeTest::PublishServer\\$SmokeTest::ProductType\\$SmokeTest::BuildNum\\logs\\Smoketest\\$_[0]\\$_[1]\\";
+		if ($_[3] eq "NAND\\")
+		{
+			$publishstring .= "NAND\\";
+		}
+		elsif ($_[3] eq "NAND\(DP\)\\")
+		{
+            $publishstring .= "NAND\(DP\)\\";
+	    }
+		print PublishFile "$publishstring";
+		$publishstring = "\n$SmokeTest::PublishServer\\$SmokeTest::ProductType\\logs\\$SmokeTest::BuildNum\\Smoketest\\$_[0]\\$_[1]\\";
+		if ($_[3] eq "NAND\\")
+		{
+			$publishstring .= "NAND\\";
+		}
+		elsif ($_[3] eq "NAND\(DP\)\\")
+		{
+                $publishstring .= "NAND\(DP\)\\";
+        }
+		print PublishFile "$publishstring";
+		close PublishFile;
+		print "\n*** Publish file created successfully ***\n";
+	}
+	else
+	{
+		print "\nREMARK: Smoke Test *** Could not Create Publish File\n$!";
+		#&SmokeTest::DieLog("Error In Smoke Test: Could not Create Publish File");
+	}
+	
+	#
+	# Copy This publish file to the correct directory 
+	#
+	print "\n";
+	print "#\n# Copy This publish file to the correct directory \n#\n";
+	print "\n";
+	
+	###print "\nabout to move /Y $_[0]$_[1].txt \\\\$masterserver\\Jobs\\$jobid\\publish.txt\n";
+    SmokeTest::ExecCommand ("MOVE /Y $_[0]$_[1].txt \\\\$masterserver\\Jobs\\$jobid\\publish.txt");
+	
+	SmokeTest::PrintDateTime();
+}
+
+1;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SyncMLApp/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,27 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For SnyncMLApp smoketest
+// 
+//
+
+PRJ_EXPORTS
+
+../scripts/smoketest_syncmlapp.script		/epoc32/release/wins/udeb/z/smoketest/smoketest_syncmlapp.script
+../scripts/smoketest_syncmlapp.script		/epoc32/release/wins/urel/z/smoketest/smoketest_syncmlapp.script
+../scripts/smoketest_syncmlapp.script		/epoc32/release/winscw/udeb/z/smoketest/smoketest_syncmlapp.script
+../scripts/smoketest_syncmlapp.script		/epoc32/release/winscw/urel/z/smoketest/smoketest_syncmlapp.script
+
+PRJ_MMPFILES
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/SyncMLApp/scripts/smoketest_syncmlapp.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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 "Eclipse Public License v1.0"
+// which accompanies 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 smlapplication for 10 seconds
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\smlapplication.exe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/System/Group/Smoketest_System.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,40 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Smoketest_Agenda.mmp
+// using relative paths for sourcepath and user includes
+// 
+//
+
+TARGET			Smoketest_System.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7773
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		WriteUserData ReadUserData
+
+SOURCEPATH		..\Src
+
+SOURCE		TestSystemBase.cpp
+
+USERINCLUDE		..\Inc ..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY	EUSER.LIB
+LIBRARY	EIKSRV.LIB
+LIBRARY	TESTEXECUTELOGCLIENT.LIB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/System/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,26 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For System smoketest
+// 
+//
+
+PRJ_EXPORTS
+
+../scripts/smoketest_system.script		/epoc32/release/wins/udeb/z/smoketest/smoketest_system.script
+../scripts/smoketest_system.script		/epoc32/release/wins/urel/z/smoketest/smoketest_system.script
+../scripts/smoketest_system.script		/epoc32/release/winscw/udeb/z/smoketest/smoketest_system.script
+../scripts/smoketest_system.script		/epoc32/release/winscw/urel/z/smoketest/smoketest_system.script
+
+PRJ_TESTMMPFILES
+Smoketest_System.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/System/Inc/TestSystemBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -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:
+//
+
+
+#ifndef TEST_SYSTEM_BASE_H
+#define TEST_SYSTEM_BASE_H
+
+#include <eikunder.h>
+#include <test/testexecutelog.h>
+
+class CEikUndertaker;
+
+class CSystemTestBase : public MEikUndertakerObserver
+	{
+public:
+	static CSystemTestBase* NewL();
+	~CSystemTestBase();
+
+protected:	
+	CSystemTestBase();
+	void ConstructL();
+
+protected: // From MEikUndertakerObserver
+	void HandleThreadExitL(RThread& aThread);
+	
+protected:
+	CEikUndertaker* iUndertaker;
+	RTestExecuteLogServ iLogger;
+	TInt iExitReason;	
+	TExitCategoryName iExitCategory;
+	};
+
+
+#endif // TEST_SYSTEM_BASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/System/Src/TestSystemBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,116 @@
+// 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 "TestSystemBase.h"
+
+// Global Vars
+_LIT(KTestExecuteLog,"c:\\Logs\\TestExecute\\smoketest_system_temp.htm");
+_LIT(KPanicText,"The following Panic has occured: Thread Name = %S Exit Reason = %d Exit Category = %S");
+
+CSystemTestBase* CSystemTestBase::NewL()
+	{
+	CSystemTestBase* self=new(ELeave) CSystemTestBase;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); // self
+	return(self);
+	}
+
+void CSystemTestBase::ConstructL()
+	{
+	iUndertaker=CEikUndertaker::NewL(*this);
+	User::LeaveIfError(iLogger.Connect());
+	User::LeaveIfError(iLogger.CreateLog(KTestExecuteLog,RTestExecuteLogServ::ELogModeAppend));
+	}
+
+CSystemTestBase::CSystemTestBase()
+	{
+	// do nothing
+	}
+
+CSystemTestBase::~CSystemTestBase()
+	{
+	delete iUndertaker;
+	iLogger.Close();
+	}
+
+void CSystemTestBase::HandleThreadExitL(RThread& aThread)
+	{
+	TExitType exitType=aThread.ExitType();
+	if (exitType==EExitPanic)
+		{
+		CActiveScheduler::Stop();
+		iExitReason = aThread.ExitReason();
+		iExitCategory = aThread.ExitCategory();
+		TBuf<100> iName(aThread.FullName());
+		iLogger.WriteFormat(KPanicText, &iName, iExitReason, &iExitCategory);
+		User::Panic(iExitCategory,iExitReason);
+		}
+	}
+
+//LOCAL_C TInt PanicThread(TAny*)
+//	{
+//	_LIT(PanicReason, "Just, why not");
+//	TInt iPanicInt = 666;
+//	User::Panic(PanicReason, iPanicInt);
+//	return iPanicInt;
+//	}
+	
+LOCAL_C void MainL()
+	{
+	// Construct and install the active scheduler
+	CActiveScheduler*  myScheduler = new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(myScheduler);
+	CActiveScheduler::Install(myScheduler); 
+	
+	CSystemTestBase* iTempBase = CSystemTestBase::NewL();
+	
+	// The following is just test code that spawns a thread and makes it panic
+	//RThread iPanicThread;
+	//_LIT(PanicThreadTest, "Undertaker Panic Thread Test");
+		
+	//User::LeaveIfError(iPanicThread.Create(PanicThreadTest(), &PanicThread, KDefaultStackSize, 0x100, 0x100, NULL));
+	//iPanicThread.SetPriority(EPriorityAbsoluteHigh);
+	//iPanicThread.Resume();
+	
+	CActiveScheduler::Start();	
+	
+	for (;;)
+		{
+		User::After(100000);
+		}
+	}
+	
+GLDEF_C TInt E32Main()
+/**
+ * Executable Entry Point
+ * Top level always creates TRAP harness.
+ * Calls MainL() inside the TRAP harness
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	// should never reach this point if some thread has panicked already
+	_LIT(KTestPanicReason,"Trap");
+	__ASSERT_ALWAYS(!err, User::Panic(KTestPanicReason,err));
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+	}	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/System/scripts/smoketest_system.script	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+//
+// 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 Run Smoke Test System for 20 seconds
+//
+RUN_WS_PROGRAM 20 z:\sys\bin\Smoketest_System.exe
+//
+PRINT Finished Running Smoke Test System for 20 seconds
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/ConsoleAlarmAlertServer.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,44 @@
+// Copyright (c) 1999-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:
+//
+
+TARGET					ConsoleAlarmAlertServer.dll
+TARGETTYPE				dll
+CAPABILITY   All -TCB
+UID						0x1000008D	0x101F502A
+VENDORID 0x70000001
+
+SOURCEPATH				..\ConsoleAlarmAlertServer\Source
+
+SOURCE					ConsoleAlarmAlertServer.cpp
+SOURCE					ConsoleAlarmAlertSession.cpp
+SOURCE					ConsoleAlarmAlertConsole.cpp
+SOURCE					ConsoleAlarmAlertServerMain.cpp
+SOURCE					ConsoleAlarmAlertLEDFlasher.cpp
+
+USERINCLUDE				..\ConsoleAlarmAlertServer\Include
+//USERINCLUDE				..\AlarmAlert\Shared
+//USERINCLUDE				..\Shared\Include
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY					euser.lib
+LIBRARY					hal.lib
+LIBRARY					AlarmShared.lib
+
+DEFFILE					ConsoleAlarmAlertServer.DEF
+
+START WINS
+	baseaddress			0x40700000
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertConsole.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTCONSOLE_H__
+#define __CONSOLEALARMALERTCONSOLE_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "asaltdefs.h"
+
+// Type definitions
+
+// Constants
+
+// Classes referenced
+class CConsoleAlarmAlertSession;
+
+// Enumerations
+
+
+//
+// ----> CConsoleAlarmAlertConsole (header)
+//
+class CConsoleAlarmAlertConsole : public CActive
+	{
+//
+public:										// CONSTRUCT / DESTRUCT
+//
+	CConsoleAlarmAlertConsole(CConsoleAlarmAlertSession& aSession);
+	~CConsoleAlarmAlertConsole();
+
+//
+public:										// ACCESS
+//
+	void									GetKey();
+	void									CancelKey();
+	void									DecCounter();
+	void									UpdateDisplay();
+	TInt									GetTimeInterval() const;
+	void									SetVisibility(TInt aVis);
+	void									SetAlertState(TInt aFlags);
+
+//
+protected:									// FROM CActive
+//
+	void									RunL();
+	void									DoCancel();
+
+//
+protected:									// INTERNAL METHODS
+//
+	void									Hide();
+	void									CreateWin();
+	void									DoDeferTime(TASAltAlertServerResponse aResponse);
+
+	static TBool							CountDownCallBack(TAny* aSelf);
+
+//
+private:									// MEMBER DATA
+//
+
+	TInt									iAlertState;
+
+	TInt									iTimeInterval;
+
+	CPeriodic*								iCountDown;
+
+	CConsoleBase*							iWin;
+
+	CConsoleAlarmAlertSession&				iSession;
+
+	friend class							CConsoleAlarmAlertSession;
+
+	TInt									iInstructionIndex;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertLEDFlasher.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,75 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTLEDFLASHER_H__
+#define __CONSOLEALARMALERTLEDFLASHER_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertLEDFlasher (header)
+//
+class CConsoleAlarmAlertLEDFlasher : public CTimer
+	{
+//
+public:										// STATIC CONSTRUCT
+//
+	static CConsoleAlarmAlertLEDFlasher*	NewL();
+
+//
+private:									// INTERNAL CONSTRUCT
+//
+	CConsoleAlarmAlertLEDFlasher();
+
+//
+public:										// ACCESS
+//
+
+	TInt									Start();
+
+	void									Stop();
+
+//
+private:									// FROM CActive
+//
+
+	void									RunL();
+
+//
+private:									// INTERNAL
+//
+
+	TInt									SetRedLedOn(TBool aOn);
+
+//
+private:									// MEMBER DATA
+//
+
+	TBool									iLedOn;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,87 @@
+// Copyright (c) 1999-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:
+// TALARMALERTSERVER.H
+// 
+//
+
+#ifndef __CONSOLEALARMALERTSERVER_H__
+#define __CONSOLEALARMALERTSERVER_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+class CTestAlarmAlertConsole;
+class CConsoleAlarmAlertSession;
+
+//
+// ----> CConsoleAlarmAlertServer (header)
+//
+class CConsoleAlarmAlertServer : public CPolicyServer
+	{
+//
+public:										// STATIC CONSTRUCT / DESTRUCT
+//
+	static CConsoleAlarmAlertServer*		NewLC();
+	~CConsoleAlarmAlertServer();
+
+public:
+	inline void								AddResponseArray(TAny* aResponseArray);
+	void									SetAttachment(HBufC8* aData);
+	inline HBufC8*							Attachment() const;
+	inline TAny*							ResponseArray() const;
+	inline CConsoleAlarmAlertSession*		WaitingSession() const;
+	inline void								SetNotifying(TBool aIsNotifying);
+	inline TBool							IsNotifying() const;
+//
+private:									// INTERNAL CONSTRUCT
+//
+	CConsoleAlarmAlertServer();
+	void									ConstructL();
+
+//
+public:										// FROM CServer2
+//
+	CSession2*								NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+
+//
+private:									// FROM CActive
+//
+	TInt									RunError(TInt aError);
+
+//
+private:									// MEMBER DATA
+//
+	TAny*									iInstructionSet;
+	HBufC8*									iAttachment;
+	CConsoleAlarmAlertSession*				iWaitingSession;
+	TBool									iIsNotifying;
+	};
+
+// inline functions
+void CConsoleAlarmAlertServer::AddResponseArray(TAny* aResponseArray)		{ iInstructionSet = aResponseArray; }
+HBufC8* CConsoleAlarmAlertServer::Attachment() const						{ return iAttachment; }
+TAny* CConsoleAlarmAlertServer::ResponseArray() const						{ return iInstructionSet; }
+CConsoleAlarmAlertSession* CConsoleAlarmAlertServer::WaitingSession() const	{ return iWaitingSession; }
+void CConsoleAlarmAlertServer::SetNotifying(TBool aIsNotifying)				{ iIsNotifying = aIsNotifying; }
+TBool CConsoleAlarmAlertServer::IsNotifying()	const						{ return iIsNotifying; }
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertServerMain.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTSERVERMAIN_H__
+#define __CONSOLEALARMALERTSERVERMAIN_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> ConsoleAlarmAlertServer (header)
+//
+class ConsoleAlarmAlertServer
+/**
+@internalAll
+@released
+*/
+	{
+//
+public:										// ACCESS
+//
+	IMPORT_C static void					StartConsoleAlarmAlertServerL(TAny* instructionSet = NULL);
+
+//
+private:									// INTERNAL
+//
+	static TInt								StartServerThreadFunction(TAny* instructionSet = NULL);
+	static void								StartServerL(TAny* instructionSet = NULL);
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Include/ConsoleAlarmAlertSession.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,137 @@
+// Copyright (c) 1999-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 __CONSOLEALARMALERTSESSION_H__
+#define __CONSOLEALARMALERTSESSION_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "asaltdefs.h"
+#include "asshdalarm.h"
+
+// Type definitions
+
+// Constants
+
+// Classes referenced
+class CConsoleAlarmAlertConsole;
+class CConsoleAlarmAlertLEDFlasher;
+class CConsoleAlarmAlertServer;
+// Enumerations
+
+
+struct TAgnAlarmInfo
+	/**
+	Copy of System-Wide Unique Agenda Entry Reference defined in agmalarm.h
+	*/
+	{
+	TUid iAlarmCategory;
+	TUint32 iAgnUniqueId;
+	TFileName iFileName;
+	};
+
+//
+// ----> CConsoleAlarmAlertSession (header)
+//
+class CConsoleAlarmAlertSession : public CSession2
+	{
+//
+public:										// STATIC CONSTRUCT / DESTRUCT
+//
+	static CConsoleAlarmAlertSession*		NewL(CConsoleAlarmAlertServer* aServer);
+	~CConsoleAlarmAlertSession();
+
+//
+private:									// INTERNAL CONSTRUCT
+//
+	CConsoleAlarmAlertSession(CConsoleAlarmAlertServer* aServer);
+	void									ConstructL();
+
+//
+public:										// ACCESS
+//
+
+	TTime									DeferTime() const;
+
+	inline const TASShdAlarm& 				Alarm() const { return iAlarm; }
+
+	inline TInt								AlarmDataSize() const { return iAlarmAssociatedDataSize; }
+
+	inline const TAgnAlarmInfo&				AlarmData() const { return iAlarmData; }
+
+	void									Notify(TASAltAlertServerResponse aFlag);
+
+	void									Notify(TASAltAlertServerResponse aFlag, const TTime& aDeferTime);
+
+	TAny *									InstructionSet();
+
+//
+private:									// FROM CSession2
+//
+	void									ServiceL(const RMessage2& aMessage);
+
+//
+private:									// CMD - DEBUG ONLY
+//
+	TBool									CmdL();
+
+//
+private:									// INTERNAL METHODS
+//
+
+	void									SetAlarmL(const RMessage2& aMessage);
+
+	void									GetUserTimeL(const RMessage2& aMessage);
+
+	void									SetDeferTimeL(const RMessage2& aMessage);
+
+	static TBool							SoundPlaybackCallbackL(TAny* aSelf);
+
+//
+private:									// MEMBER DATA
+//
+
+	TTime									iDeferTime;
+
+	TASShdAlarm								iAlarm;
+
+	TInt									iAlarmAssociatedDataSize;
+
+	TAgnAlarmInfo							iAlarmData;
+
+	TBool									iLoggedOn;
+
+	TBool									iHasMessage;
+
+	TBool									iMsgComplete;
+
+	RMessage2								iMsgPtr;
+
+	CPeriodic*								iSoundCallbackTimer;
+
+	CConsoleAlarmAlertLEDFlasher*			iSoundLEDFlasher;
+
+	CConsoleAlarmAlertConsole*				iConsole;
+
+	CConsoleAlarmAlertServer*				iServer;
+
+	TAny*									iInstructionSet;
+
+	TBool									iInstructionSetFound;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertConsole.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,404 @@
+// Copyright (c) 1999-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 "consolealarmalertconsole.h"
+
+// System includes
+#include <e32twin.h>
+#include <e32base.h>
+#include <e32svr.h>
+
+// User includes
+#include "asaltdefs.h"
+#include "consolealarmalertsession.h"
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertConsole (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertConsole::CConsoleAlarmAlertConsole(CConsoleAlarmAlertSession& aSession)
+:	CActive(CActive::EPriorityLow), iSession(aSession), iInstructionIndex(0)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertConsole::~CConsoleAlarmAlertConsole()
+	{
+	Cancel();
+	Hide();
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::GetKey()
+	{
+	if	(iWin && !IsActive())
+		{
+		SetActive();
+		iWin->Read(iStatus);
+		}		
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::CancelKey()
+	{
+	if	(IsActive())
+		Cancel();
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DecCounter()
+	{
+	if	(iTimeInterval > 0)
+		{
+		--iTimeInterval;
+		UpdateDisplay();
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::UpdateDisplay()
+	{
+	TBuf<180> buf;
+	_LIT(KEalwlAlarmSoundOff, "Off");
+	_LIT(KEalwlAlarmSoundOn, "On");
+	_LIT(KEalwlStatusEnabled, "Are");
+	_LIT(KEalwlStatusNotEnabled, "Are Not");
+	_LIT(KEalwlStatusIs, "Is");
+	_LIT(KEalwlStatusIsNo, "Is No");
+	//
+	if	(!iWin)
+		return;
+	iWin->SetCursorPosAbs(TPoint(0,0));
+
+	// MESSAGE
+	buf.Format(_L("Message : %S"), &iSession.Alarm().Message());
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// DATA
+	if	(iSession.Alarm().HasAssociatedData())
+		{
+		const TAgnAlarmInfo data = iSession.AlarmData();
+		const TUid KUidAgendaModelAlarmCategory = { 0x101F4A70 };
+		if (data.iAlarmCategory == KUidAgendaModelAlarmCategory)
+			{
+			_LIT(KEalwlAgendaData,"\ndata: agenda filename \"%S\"");
+			if (data.iFileName.Length() < 40)
+				buf.Format(KEalwlAgendaData,&data.iFileName);
+			else
+				{
+				TBuf<40> temp = data.iFileName.Left(40);
+				buf.Format(KEalwlAgendaData,&temp);
+				}
+			}
+		else
+			buf.Format(_L("\nAlarm has %d data bytes"), iSession.AlarmDataSize());
+		}
+	else
+		{
+		buf = _L("\nAlarm has no associated data");
+		}
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// DEFER TIME
+	if	(iSession.DeferTime() != Time::NullTTime())
+		{
+		TDateTime dateTime(iSession.DeferTime().DateTime());
+		buf.Format(_L("\nDefer   : %02d:%02d"), dateTime.Hour(), dateTime.Minute());
+		}
+	else
+		buf=_L("\nNULL defer time");
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// TIME INTERVAL
+	buf.Format(_L("\nCurrent time interval is %d minutes"), GetTimeInterval());
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// STATE FLAGS
+	buf.Format(_L("\nAlarm sounds are %S"),(iAlertState&EASAltStateFlagsSilentRunning)?&KEalwlAlarmSoundOff:&KEalwlAlarmSoundOn);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nAlarm sounds %S paused"),(iAlertState&EASAltStateFlagsSoundIsPaused)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nAlarm sounds %S deferred"),(iAlertState&EASAltStateFlagsInQuietPeriod)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S more than one unacknowledged alarms"),(iAlertState&EASAltStateFlagsMoreThanOneDueAlarm)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S memory to snooze alarms"),(iAlertState&EASAltStateFlagsNoMemoryForSnoozeAlarm)?&KEalwlStatusIsNo:&KEalwlStatusIs);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S an alarm sound to play"),(iAlertState&EASAltStateFlagsAlarmHasNoSoundFileName)?&KEalwlStatusIsNo:&KEalwlStatusIs);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// COMMAND PROMPTS
+	iWin->Write(_L("\nENTER = Silence alarm          SPACE = Quiet Period"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\nESCAPE = Acknowledge alarm     A = Acknowledge all"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\nP = Pause alarm sound          TAB = Snooze alarm"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n1 = 1 min sound interval		 0 = 0 mins sound interval"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n+ = Increase int. and pause    - = Decrease int. and pause"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n! = Kill alarm alert server"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\r"));
+	//
+	if(!iSession.InstructionSet()) //Get user input if instruction set unspecified.
+		GetKey();
+	else if (iInstructionIndex >= static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count()) //Get user input if program has already iterated thru entire instruction set.
+		GetKey();
+	else //Use the command in the instruction set, instead of waiting for user input.
+		{
+			if(!IsActive())
+			{
+			iStatus = KRequestPending;
+			TRequestStatus* ptrStatus = &iStatus;
+			User::RequestComplete( ptrStatus, KErrNone );
+			SetActive();
+			}
+		}
+	}
+
+//*************************************************************************************
+TInt CConsoleAlarmAlertConsole::GetTimeInterval() const
+	{
+	return(iTimeInterval);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::SetVisibility(TInt aVis)
+	{
+	if	(!aVis)
+		Hide();
+	else if (!iWin)
+		{
+		// Create a new window, since cannot set order of console windows
+		CreateWin();
+		UpdateDisplay();
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::SetAlertState(TInt aFlags)
+	{
+	iAlertState = aFlags;
+	UpdateDisplay();
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::RunL()
+	{
+	if (iStatus.Int() == KErrCancel)
+		return;
+
+	__ASSERT_DEBUG(iWin, User::Invariant());
+	TInt key = iWin->KeyCode();
+	if(iSession.InstructionSet() && iInstructionIndex < static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count())
+		{
+		RArray<TInt>* temp = static_cast<RArray<TInt>*>(iSession.InstructionSet());
+		key = (*temp)[iInstructionIndex++];
+		GetKey();
+		}
+	else
+		{
+		GetKey();
+		if ((key>=EKeyF1 && key<=EKeyF12) || key==EKeyTab)
+			{
+			DoDeferTime(EASAltAlertServerResponseSnooze);
+			}
+		}
+
+	switch (key)
+		{
+	// ACKNOWLEDGE CURRENT
+	case EKeyEscape:
+		iSession.Notify(EASAltAlertServerResponseClear);
+		return;
+	// ACKNOWLEDGE ALL
+	case 'a':
+	case 'A':
+		iSession.Notify(EASAltAlertServerResponseClearAll);
+		return;
+	// QUIET PERIOD
+	case EKeySpace:
+		DoDeferTime(EASAltAlertServerResponseQuietPeriod);
+		break;
+	// PAUSE SOUND
+	case 'p':
+	case 'P':
+		DoDeferTime(EASAltAlertServerResponsePauseSound);
+		break;
+	// SILENCE ALL SOUND
+	case EKeyEnter:
+		iSession.Notify(EASAltAlertServerResponseSilence);
+		break;
+	// INTERVAL 1 MINUTE
+	case '1':
+		iTimeInterval=1;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// INTERVAL 0 MINUTES
+	case '0':
+		iTimeInterval=0;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// PAUSE +
+	case '=':
+	case '+':
+		iTimeInterval++;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// PAUSE -
+	case '-':
+		iTimeInterval--;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+
+	// QUIT
+	case '!':
+		CActiveScheduler::Stop();
+		break;
+		}
+
+	TBuf<10> buf;
+	buf.Format(_L("'%c',"), key);
+	iWin->Write(buf);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DoCancel()
+	{
+	__ASSERT_DEBUG(iWin, User::Invariant());
+	iWin->ReadCancel();
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::Hide()
+	{
+	if	(iWin)
+		CancelKey(); 
+	//
+	delete iWin;
+	iWin = NULL;
+	//
+	if	(iCountDown)
+		iCountDown->Cancel();
+	//
+	delete iCountDown;
+	iCountDown=NULL;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::CreateWin()
+	{
+	_LIT(KAlarmAlertConsoleCaption, "Test Alarm Alert Server Console");
+	//
+	__ASSERT_DEBUG(!iWin, User::Invariant());
+	__ASSERT_DEBUG(!iCountDown, User::Invariant());
+	//
+	TRAPD(trapCheck, iWin = Console::NewL(KAlarmAlertConsoleCaption, TSize(KConsFullScreen, KConsFullScreen)));
+	if	(trapCheck)
+		{
+		iWin=NULL;
+		return;
+		}
+	
+	TRAP(trapCheck, iCountDown = CPeriodic::NewL(CActive::EPriorityIdle));
+	if	(trapCheck)
+		{
+		iCountDown=NULL;
+		return;
+		}
+	//
+	const TTimeIntervalMicroSeconds32 interval(60000000);
+	iCountDown->Start(interval, interval, TCallBack(&CountDownCallBack, this));
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DoDeferTime(TASAltAlertServerResponse aResponse)
+	{
+	if	(++iTimeInterval > 60)
+		{
+		iTimeInterval = 5;
+		User::Beep(440, 12);
+		}
+	//
+	TTime now;
+	now.HomeTime();
+	now += TTimeIntervalMinutes(iTimeInterval);
+	//
+	iSession.Notify(aResponse, now);
+	}
+
+
+//*************************************************************************************
+TBool CConsoleAlarmAlertConsole::CountDownCallBack(TAny* aSelf)
+	{
+	CConsoleAlarmAlertConsole& self = *reinterpret_cast<CConsoleAlarmAlertConsole*>(aSelf);
+	self.DecCounter();
+	//
+	return EFalse;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertLEDFlasher.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,130 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "consolealarmalertledflasher.h"
+
+// System includes
+#include <hal.h>
+
+// User includes
+#include "asaltdefs.h"
+
+// Type definitions
+
+// Constants
+const TInt KFlasherPeriodicity = 500000;
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertLEDFlasher (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertLEDFlasher::CConsoleAlarmAlertLEDFlasher()
+:	CTimer(CActive::EPriorityIdle)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertLEDFlasher* CConsoleAlarmAlertLEDFlasher::NewL()
+	{
+	CConsoleAlarmAlertLEDFlasher* self = new(ELeave) CConsoleAlarmAlertLEDFlasher();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+/**
+ * Start the flasher, if not busy
+ */
+TInt CConsoleAlarmAlertLEDFlasher::Start()
+	{
+	Stop();
+	After(KFlasherPeriodicity);
+	return(SetRedLedOn(ETrue));
+	}
+
+
+//*************************************************************************************
+/**
+ * Stop the LED flashing
+ */
+void CConsoleAlarmAlertLEDFlasher::Stop()
+	{
+	Cancel();
+	SetRedLedOn(EFalse);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+/**
+ * @see CActive
+ */
+void CConsoleAlarmAlertLEDFlasher::RunL()
+	{
+	if (iStatus!=KErrNone)
+		{
+		SetRedLedOn(EFalse);
+		return;
+		}
+	SetRedLedOn(!iLedOn);
+	After(KFlasherPeriodicity);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+/**
+ * Turn the LED on or off
+ */
+TInt CConsoleAlarmAlertLEDFlasher::SetRedLedOn(TBool aOn)
+	{
+	const TInt KClearAllLeds = 0;
+	const TInt KLedMaskRed1 = 1;
+
+	iLedOn = aOn;
+	if (iLedOn)
+		{
+		return HAL::Set(HAL::ELEDmask, KLedMaskRed1);
+		}
+	else
+		{
+		return HAL::Set(HAL::ELEDmask, KClearAllLeds);
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,131 @@
+// Copyright (c) 1999-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 "consolealarmalertserver.h"
+
+// System includes
+
+// User includes
+#include "asaltdefs.h"
+//
+#include "consolealarmalertsession.h"
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+// The Console Alarm Alert Server is migrated to a secure server in EKA2
+#include <e32base.h>
+
+
+
+const TUint KRangeCount = 1; 
+
+const TInt KOpCodeRanges[KRangeCount] = 
+	{	
+	0 // All Op Codes  from 0 to KMaxInt should pass. No restrictions	
+	};
+
+
+const TUint8 KElementsIndex[KRangeCount] =
+	{
+	CPolicyServer::EAlwaysPass, 	//All OP Codes Allways passing no capability required 
+	};
+
+
+const CPolicyServer::TPolicy KConsoleAlarmAlertServerPolicy =
+	{
+	CPolicyServer::EAlwaysPass, //specifies all connect attempts should pass
+	KRangeCount,
+	KOpCodeRanges,
+	KElementsIndex, 	// what each range is compared to 
+	KNullHandle			//Since we have no specific policy checking
+	};
+ 	
+
+
+//
+// ----> CConsoleAlarmAlertServer (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertServer::CConsoleAlarmAlertServer()
+ 	:CPolicyServer(CActive::EPriorityStandard, KConsoleAlarmAlertServerPolicy), iInstructionSet(NULL)
+	{
+	}
+
+
+
+//*************************************************************************************
+CConsoleAlarmAlertServer::~CConsoleAlarmAlertServer()
+	{
+	if (iAttachment)
+		delete iAttachment;	
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertServer::ConstructL()
+	{
+	StartL(KAlarmAlertServerName);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertServer* CConsoleAlarmAlertServer::NewLC()
+	{
+	CConsoleAlarmAlertServer* self = new(ELeave) CConsoleAlarmAlertServer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+//
+//
+//
+
+
+//*************************************************************************************
+CSession2* CConsoleAlarmAlertServer::NewSessionL(const TVersion& aVersion,const RMessage2& /*aMessage*/) const
+	{
+	const TVersion KServerVersion(KASAltVersionMajor, KASAltVersionMinor, KASAltVersionBuild);
+	if	(!User::QueryVersionSupported(KServerVersion, aVersion))
+		User::Leave(KErrNotSupported);
+	//
+	return CConsoleAlarmAlertSession::NewL((CConsoleAlarmAlertServer*)this);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TInt CConsoleAlarmAlertServer::RunError(TInt /*Error*/)
+	{
+	return KErrNone;
+	}
+
+void CConsoleAlarmAlertServer::SetAttachment(HBufC8* data)
+	{
+	if (iAttachment)
+		delete iAttachment;
+	iAttachment = data;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertServerMain.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,117 @@
+// Copyright (c) 1999-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 "consolealarmalertservermain.h"
+
+// System includes
+
+// User includes
+#include "asaltdefs.h"
+//
+#include "consolealarmalertserver.h"
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> ConsoleAlarmAlertServer (source)
+//
+
+//*************************************************************************************
+EXPORT_C void ConsoleAlarmAlertServer::StartConsoleAlarmAlertServerL(TAny* instructionSet)
+	{
+	_LIT(KAlarmAlertServerThreadName, "ConsoleAlarmAlertServerThread");
+	//
+	const TInt KStackSize		= 0x0002000;	//  8KB
+	const TInt KInitHeapSize	= 0x0001000;	//  4KB
+	const TInt KHeapSize		= 0x1000000;	// 16MB
+	//
+	// Is the alarm alert server already running? If so, don't
+	// start a new one...
+	TFullName name;
+	TFindServer finder(KAlarmAlertServerName);
+	if	(finder.Next(name) == KErrNone)
+		return;
+	
+	RThread serverThread;
+	const TInt error = serverThread.Create(KAlarmAlertServerThreadName,
+										   &StartServerThreadFunction,
+										   KStackSize,
+										   KInitHeapSize,
+										   KHeapSize,
+										   instructionSet
+										  );
+	User::LeaveIfError(error);
+	//
+	serverThread.SetPriority(EPriorityMore);
+	serverThread.Resume();
+	//
+	User::After(2000000); // 2 seconds
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TInt ConsoleAlarmAlertServer::StartServerThreadFunction(TAny* instructionSet)
+	{
+	__UHEAP_MARK;
+	//
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if	(!cleanup)
+		User::Invariant();
+	//
+	TRAPD(err, StartServerL(instructionSet));
+	delete cleanup;
+	//
+	__UHEAP_MARKEND;
+	return err;
+	}
+
+
+//*************************************************************************************
+void ConsoleAlarmAlertServer::StartServerL(TAny* instructionSet)
+	{
+	CActiveScheduler* scheduler = new CActiveScheduler();
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install(scheduler);
+	//
+
+	CConsoleAlarmAlertServer * tmp = CConsoleAlarmAlertServer::NewLC();
+	tmp->AddResponseArray(instructionSet);
+	CActiveScheduler::Start();
+	//
+	CleanupStack::PopAndDestroy(2, scheduler);
+	}
+
+
+
+
+
+
+//
+// ----> ConsoleAlarmAlertServer (source)
+//
+
+//*************************************************************************************
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertSession.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,335 @@
+// Copyright (c) 1999-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 "consolealarmalertsession.h"
+
+// System includes
+
+#include "e32svr.h"
+// User includes
+#include "asaltdefs.h"
+//#include "..\..\Test\ConsoleANTestClient.h"
+//
+#include "consolealarmalertsession.h"
+#include "consolealarmalertconsole.h"
+#include "consolealarmalertledflasher.h"
+#include "consolealarmalertserver.h" //for inter-session communication
+
+// Type definitions
+
+// Constants
+const TInt KSlot0 = 0;
+const TInt KSlot1 = 1;
+const TInt KSlot2 = 2;
+
+// Enumerations
+
+// Classes referenced
+
+
+//
+// ----> CConsoleAlarmAlertSession (source)
+//
+
+//*************************************************************************************
+CConsoleAlarmAlertSession::CConsoleAlarmAlertSession(CConsoleAlarmAlertServer* aServer)
+:	iServer(aServer), iInstructionSet(NULL), iInstructionSetFound(EFalse)
+	{
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertSession::~CConsoleAlarmAlertSession()
+	{
+	CConsoleAlarmAlertSession* session = iServer->WaitingSession();
+	session = NULL;
+	delete iSoundLEDFlasher;
+	delete iSoundCallbackTimer;
+	delete iConsole;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::ConstructL()
+	{
+	iSoundLEDFlasher = CConsoleAlarmAlertLEDFlasher::NewL();
+	iSoundCallbackTimer = CPeriodic::NewL(CActive::EPriorityIdle);
+	iConsole = new(ELeave) CConsoleAlarmAlertConsole(*this);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertSession* CConsoleAlarmAlertSession::NewL(CConsoleAlarmAlertServer* aServer)
+	{
+	CConsoleAlarmAlertSession* self = new(ELeave) CConsoleAlarmAlertSession(aServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TTime CConsoleAlarmAlertSession::DeferTime() const
+	{
+	return iDeferTime;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::Notify(TASAltAlertServerResponse aFlag)
+	{
+	if	(iHasMessage)
+		{
+		iMsgPtr.Complete(aFlag);
+		iHasMessage = EFalse;
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::Notify(TASAltAlertServerResponse aFlag, const TTime& aDeferTime)
+	{
+	if	(iHasMessage)
+		{
+		TPckgC<TTime> time(aDeferTime);
+		TRAPD(err, iMsgPtr.WriteL(KSlot0, time));
+		__ASSERT_DEBUG(err == KErrNone, User::Invariant());
+		Notify(aFlag);
+		}
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::ServiceL(const RMessage2& aMessage)
+	{
+	iMsgComplete = ETrue;
+	const TInt function = aMessage.Function();
+
+	//see if the server holds a set of instructions to be followed,
+	//rather than waiting for user input.
+	if(!iInstructionSetFound) //go look for it now.
+		{
+		//we will enter into this code only once
+		const CServer2* tmpServ = Server();
+		const CConsoleAlarmAlertServer* specific = reinterpret_cast<const CConsoleAlarmAlertServer*>(tmpServ);
+		iInstructionSet = const_cast<CConsoleAlarmAlertServer*>(specific)->ResponseArray();
+		iInstructionSetFound = ETrue;
+		}
+
+	//
+	switch(function)
+		{
+    case EASAltOpCodeNotify:
+    	{
+		__ASSERT_ALWAYS(!iHasMessage, User::Invariant());
+		iMsgComplete = EFalse;
+		iMsgPtr = aMessage;
+		iHasMessage = ETrue;
+		CConsoleAlarmAlertSession* session = iServer->WaitingSession();
+		session = this;
+		break;
+		}
+
+    case EASAltOpCodeNotifyCancel:
+		if	(iHasMessage)
+			{
+			iHasMessage=EFalse;
+			iMsgPtr.Complete(KErrCancel);
+			}
+		break;
+
+	case EASAltOpCodeVisible:
+		{
+		TBool isVisible = aMessage.Int0();
+		iConsole->SetVisibility(isVisible);
+		iServer->SetNotifying(isVisible);
+		break;
+		}
+
+    case EASAltOpCodeSetState:
+		iConsole->SetAlertState(aMessage.Int0());
+		break;
+
+    case EASAltOpCodeSetAlarm:
+		SetAlarmL(aMessage);
+		iConsole->iTimeInterval=0;
+		iConsole->UpdateDisplay();
+		break;
+
+	case EASAltOpCodeGetUserTime:
+		GetUserTimeL(aMessage);
+		break;
+
+	case EASAltOpCodeSetDeferTime:
+		SetDeferTimeL(aMessage);
+		iConsole->UpdateDisplay();
+		break;
+
+    case EASAltOpCodeLogon:
+		__ASSERT_ALWAYS(!iLoggedOn, User::Invariant());
+		iMsgComplete=EFalse;
+		iLoggedOn=ETrue;
+		break;
+
+	case EASAltOpCodeStartPlayingSound:
+		{
+		iSoundLEDFlasher->Start();
+		TCallBack callback(SoundPlaybackCallbackL, this);
+		iSoundCallbackTimer->Start(TTimeIntervalMicroSeconds32(0), TTimeIntervalMicroSeconds32(3000000), callback);
+		break;
+		}
+
+	case EASAltOpCodeStopPlayingSound:
+		iSoundLEDFlasher->Stop();
+		iSoundCallbackTimer->Cancel();
+		break;
+
+#if 0
+//Test code
+	case EASAltTestOpCodeAcknowledgeAlarm:
+		if (iServer->WaitingSession())
+			iServer->WaitingSession()->Notify(EASAltAlertServerResponseClear);
+		break;
+
+	case EASAltTestOpCodeGetAttachment:
+		{
+		if (iServer->Attachment() != NULL)
+			{
+			const TDes8& data = iServer->Attachment()->Des();
+			const TInt maxLength = static_cast<TInt>(aMessage.Int0());
+			if	(data.Size() > maxLength)
+				User::Panic(_L("Client's buffer is too short"), KErrOverflow);
+			else
+				{
+				if (data.Length() == 0)
+					{
+					_LIT8(KEmpty,"Empty");
+					aMessage.WriteL(KSlot1, KEmpty);
+					}
+				else
+					{
+					aMessage.WriteL(KSlot1, data);
+					}
+				iServer->SetAttachment(NULL);
+				}
+			}
+		}
+		break;
+
+	case EASAltTestOpCodeGetIsNotifying:
+		{
+		TPckgC<TBool> ret = iServer->IsNotifying();
+		aMessage.WriteL(KSlot0, ret);
+		break;
+		}
+#endif
+	default:
+		User::Invariant();
+		break;
+		}
+
+	if	(iMsgComplete)
+		aMessage.Complete(KErrNone);
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+TBool CConsoleAlarmAlertSession::CmdL()
+	{
+	return KErrNone;
+	}
+
+
+//
+//
+//
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::SetAlarmL(const RMessage2& aMessage)
+	{
+	TPckg<TASShdAlarm> pA(iAlarm);
+	aMessage.ReadL(KSlot0, pA);
+	if	(iAlarm.HasAssociatedData())
+		{
+		iAlarmAssociatedDataSize = aMessage.GetDesLength(2);
+		TPckg<TAgnAlarmInfo> pB(iAlarmData);
+		aMessage.ReadL(KSlot2, pB);
+
+		//Storing the data in the server for the test session to read..
+		HBufC8* data = HBufC8::NewLC(iAlarmAssociatedDataSize);
+		TPtr8 pData(data->Des());
+		aMessage.ReadL(KSlot2, pData);
+		iServer->SetAttachment(data);  //Server takes an ownership
+		CleanupStack::Pop(data);
+		}
+	else
+		iAlarmAssociatedDataSize = 0;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::GetUserTimeL(const RMessage2& aMessage)
+	{
+	TTime time;
+	time.HomeTime();
+	time+=TTimeIntervalMinutes(iConsole->GetTimeInterval());
+	TPtrC8 pTime((TUint8 *)&time,sizeof(TTime));
+	aMessage.WriteL(KSlot0,pTime);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertSession::SetDeferTimeL(const RMessage2& aMessage)
+	{
+	TPckg<TTime> pTime(iDeferTime);
+	aMessage.ReadL(KSlot0, pTime);
+	}
+
+
+//*************************************************************************************
+TBool CConsoleAlarmAlertSession::SoundPlaybackCallbackL(TAny* /*aSelf*/)
+	{
+//	_LIT(KPlayingSound, "Playing sound");
+//	User::InfoPrint(KPlayingSound);
+	return ETrue;
+	}
+
+//**************************************************************************************
+TAny * CConsoleAlarmAlertSession::InstructionSet()
+	{
+	return iInstructionSet;
+	}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/ConsoleAlarmAlertServer/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,19 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For ConsoleAlarmAlertServer
+// 
+//
+
+PRJ_TESTMMPFILES
+ConsoleAlarmAlertServer.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Group/Smoketest_Timew.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,63 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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			Smoketest_Timew_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7775
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		WriteUserData ReadUserData
+
+SOURCEPATH		..\Src
+
+SOURCE			TestTimewServer.cpp
+SOURCE			TestTimewSetAlarm.cpp
+SOURCE			TestTimewBase.cpp
+SOURCE			SM_ALM.CPP
+SOURCE			SM_UTL.CPP
+SOURCE			SM_MOD.CPP
+SOURCE			SM_RSP.CPP
+
+USERINCLUDE		..\Inc ..\..\Group
+USERINCLUDE		..\ConsoleAlarmAlertServer\Include
+
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+library  		BAFL.LIB
+library			FBSCLI.LIB
+library			WS32.LIB
+library			CONE.LIB
+library			DIAL.LIB
+library			FEPBASE.LIB
+LIBRARY			apparc.lib
+LIBRARY			etext.lib
+LIBRARY			estor.lib
+LIBRARY			efsrv.lib
+
+library			AlarmClient.lib
+library			AlarmShared.lib
+library			EUSER.LIB
+LIBRARY			ecom.lib
+LIBRARY			TestExecuteUtils.lib
+LIBRARY			TestExecuteLogClient.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,37 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For Timew smoketest
+// 
+//
+
+PRJ_EXPORTS
+
+../Scripts/setup_Smoketest_Timew.script	/epoc32/release/wins/udeb/z/smoketest/setup_smoketest_timew.script
+../Scripts/setup_Smoketest_Timew.script	/epoc32/release/wins/urel/z/smoketest/setup_smoketest_timew.script
+../Scripts/setup_Smoketest_Timew.script	/epoc32/release/winscw/udeb/z/smoketest/setup_smoketest_timew.script
+../Scripts/setup_Smoketest_Timew.script	/epoc32/release/winscw/urel/z/smoketest/setup_smoketest_timew.script
+
+../Scripts/Smoketest_Timew.script	/epoc32/release/wins/udeb/z/smoketest/smoketest_timew.script
+../Scripts/Smoketest_Timew.script	/epoc32/release/wins/urel/z/smoketest/smoketest_timew.script
+../Scripts/Smoketest_Timew.script	/epoc32/release/winscw/udeb/z/smoketest/smoketest_timew.script
+../Scripts/Smoketest_Timew.script	/epoc32/release/winscw/urel/z/smoketest/smoketest_timew.script
+
+../TestData/Smoketest_Timew.ini				/epoc32/release/wins/udeb/z/smoketest/smoketest_timew.ini
+../TestData/Smoketest_Timew.ini				/epoc32/release/wins/urel/z/smoketest/smoketest_timew.ini
+../TestData/Smoketest_Timew.ini				/epoc32/release/winscw/udeb/z/smoketest/smoketest_timew.ini
+../TestData/Smoketest_Timew.ini				/epoc32/release/winscw/urel/z/smoketest/smoketest_timew.ini
+
+
+PRJ_TESTMMPFILES
+Smoketest_Timew.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Inc/ALMMOD.H	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,121 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __ALMMOD_H__
+#define __ALMMOD_H__
+
+// System includes
+#include <asclisession.h>
+
+// User includes
+#include "timewmod.h"
+
+// Constants
+const TInt KArrayOfAlarmIdsGranularity = 64;
+const TInt KPriorityAlarmIdleObserver=-0x0010;
+const TInt KPriorityAlarmResponder=-0x0005; // Idle observer priority must be lower than this
+
+//	The alarm model gives a general notification only
+//
+class CAlmIdleObserver : public CIdleObserver
+	{
+public:
+	static CAlmIdleObserver* NewL(MTimewModelObserver* aObserver,TInt aIdlePriority);
+	};
+
+class CAlmModel : public CModelBase
+	{
+public:
+	~CAlmModel();
+	static CAlmModel* NewL(MTimewModelObserver* aObserver,TInt aResponderPriority);
+	virtual void ProcessResponder(TInt aStatus);
+public:
+	TInt AlarmQuietPeriodMinutes() const;
+	TInt AlarmQuietPeriodSet(TInt aMinutes);
+	inline void AlarmQuietPeriodCancel();
+	TTime AlarmQuietPeriodEnd() const;
+	//
+	void AlarmSoundToggle();
+	TInt AlarmSoundStateSet(TBool aSoundOn);
+	TTimeWAlarmSoundState AlarmSoundState() const;
+	//
+	TInt ClockAlarmDelete(TInt aAlarmIndex);
+	TInt ClockAlarmEnable(TInt aAlarmIndex,TTimeWClockAlarmState aClockAlarmState);
+	TTimeWClockAlarmState ClockAlarmState(TInt aAlarmIndex) const;
+	TInt ClockAlarmSet(TInt aAlarmIndex,const TASShdAlarm& aInfo);
+	TInt ClockAlarmInfo(TInt aAlarmIndex,TASShdAlarm& aInfo);
+	//
+	void NextAlarmResetListL();
+	void NextAlarmClearList();
+	TInt NextAlarmNumber() const;
+	TInt NextAlarmDelete(TInt aIndex);
+	TBool NextAlarmCanDelete(TInt aIndex) const;
+	TInt NextAlarm(TFullName& aOwner, TASShdAlarm& aInfo) const;
+	TInt NextAlarmInfo(TInt aIndex, TFullName& aOwner, TASShdAlarm& aInfo) const;
+	//
+	TInt OrphanAlarmNumber() const;
+	inline TInt UnacknowledgedAlarmNumber() const;
+	//
+	void ReviewAlarmResetListL();
+	void ReviewAlarmClearList();
+	TInt ReviewAlarmNumber() const;
+	TInt ReviewAlarmInfo(TInt aIndex, TASShdAlarm& aInfo) const;
+
+private:
+	CAlmModel();
+	void ConstructL(MTimewModelObserver* aObserver,TInt aResponderPriority);
+
+private:
+
+	/**
+	 * The list of clock alarms. Note that although there is always 8
+	 * alarms in this list, not all will be active.
+	 */
+	RPointerArray<TASShdAlarm> iClockAlarms;
+
+	/**
+	 *
+	 */
+	RASCliSession iAlmSvr;
+
+	/**
+	 *
+	 */
+	TRequestStatus iStatus;
+
+	/**
+	 *
+	 */
+	RArray<TAlarmId> iNextAlarmIds;
+
+	/**
+	 *
+	 */
+	RArray<TAlarmId> iReviewAlarmIds;
+	};
+
+
+TInt CAlmModel::UnacknowledgedAlarmNumber() const
+	{
+	TInt count = iAlmSvr.AlarmCountByState(EAlarmStateWaitingToNotify);
+	return (count + iAlmSvr.AlarmCountByState(EAlarmStateNotifying));
+	}
+
+void CAlmModel::AlarmQuietPeriodCancel()
+	{
+	iAlmSvr.CancelAlarmSilence();
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Inc/ALMMOD.INL	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,79 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 CAlmModel
+inline TAlarmSoundState CAlmModel::AlarmSoundState() const
+	{
+	return(iAlmSvr.AlarmSoundState());
+	}
+inline void CAlmModel::AlarmSoundStateSet(TBool aSoundOn)
+	{
+	iAlmSvr.SetAlarmSoundOn(aSoundOn);
+	}
+inline void CAlmModel::AlarmSoundToggle()
+	{
+	iAlmSvr.SetAlarmSoundOn(iAlmSvr.AlarmSoundState()==EAlarmSoundOff);
+	}
+inline TTime CAlmModel::AlarmQuietPeriodEnd() const
+	{
+	return(iAlmSvr.QuietPeriodUntil());
+	}
+inline void CAlmModel::AlarmQuietPeriodCancel()
+	{
+	iAlmSvr.QuietPeriodCancel();
+	}
+inline TInt CAlmModel::ClockAlarmDelete(TInt aClockAlarmNum)
+	{
+	__ASSERT_DEBUG(aClockAlarmNum<KMaxClockAlarms,Panic(EModelOutOfRange));
+	return(iAlmSvr.AlarmDelete(aClockAlarmNum));
+	}
+inline TAlarmSetState CAlmModel::ClockAlarmState(TInt aClockAlarmNum) const
+	{
+	__ASSERT_DEBUG(aClockAlarmNum<KMaxClockAlarms,Panic(EModelOutOfRange));
+	return(iAlmSvr.AlarmState(aClockAlarmNum));
+	}
+inline void CAlmModel::NextAlarmResetListL()
+	{
+	iAlmSvr.AlarmArrayPopulateL(*iNextAlarms,RAlarmServer::EArrayNext);
+	}
+inline void CAlmModel::NextAlarmClearList()
+	{
+	iNextAlarms->Reset();
+	}
+inline TInt CAlmModel::NextAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountNext));
+	}
+inline void CAlmModel::ReviewAlarmResetListL()
+	{
+	iAlmSvr.AlarmArrayPopulateL(*iReviewAlarms,RAlarmServer::EArrayReview);
+	}
+inline void CAlmModel::ReviewAlarmClearList()
+	{
+	iReviewAlarms->Reset();
+	}
+inline TInt CAlmModel::ReviewAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountReview));
+	}
+inline TInt CAlmModel::OrphanAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountOrphan));
+	}
+inline TInt CAlmModel::UnacknowledgedAlarmNumber() const
+	{
+	return(iAlmSvr.AlarmCount(RAlarmServer::ECountUnacknowledged));
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Inc/SM_STD.H	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,55 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __SM_STD_H__
+#define __SM_STD_H__
+
+// System includes
+#include <e32base.h>
+#include <asclisession.h>
+#include <asshdalarm.h>
+
+// User includes
+#include "timewmod.h"
+
+class CModelResponder : public CActive
+	{
+public:
+	void Start();
+	virtual void RunL();
+	virtual void DoStart()=0;
+	virtual void DoCancel()=0;
+protected:
+	CModelResponder(CModelBase &aModel,TInt aPriority);
+private:
+	void NotifyModel(TInt aNotification);
+private:
+	CModelBase *iModel;
+	};
+
+class CAlmModel;
+class CAlmResponder : public CModelResponder
+	{
+public:
+	CAlmResponder(RASCliSession& aSvr,CAlmModel& aModel,TInt aResponderPriority);
+public:
+	virtual void DoStart();
+	virtual void DoCancel();
+private:
+	TAlarmId iAlarmId;
+	RASCliSession* iAlmSvr;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Inc/TIMEWMOD.H	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,145 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __TIMEWMOD_H__
+#define __TIMEWMOD_H__
+
+// System includes
+#include <e32base.h>
+
+// Constants
+const TInt KMaxClockAlarms = 8;
+
+/**
+ * From the old T32Alm.h file. Encapsulates the idea of
+ * a "Not set" alarm, which the new AlarmServer doesn't
+ * support.
+ */
+enum TTimeWClockAlarmState
+	{
+	ETimeWClockAlarmStateNotSet = 0,
+	ETimeWClockAlarmStateSet,
+	ETimeWClockAlarmStateDisabled
+	};
+
+/**
+ *
+ */
+enum TTimeWAlarmSoundState
+	{
+	ETimeWAlarmSoundOn = 0,
+	ETimeWAlarmSoundOff,
+	ETimeWAlarmQuietPeriod
+	};
+
+/**
+ *
+ */
+enum TInternalClockAlarmFlags
+	{
+	EClockAlarmFlagsIsSet		= 1
+	};
+
+enum TModelPanic
+	{
+	EModelWorld = 0,
+	EModelObserver,
+	EModelOutOfRange,
+	EModel
+	};
+enum TModelFault
+	{
+	EModelfIdleObj = 0,
+	EModelfPriorityInvalid,
+	EModelfIdleArgument,
+	EModelfNoNotifier,
+	EModelfOutOfRange,
+	EModelfTime,
+	EModelfTryingToChangeStateOfNullClockAlarm,
+	EModelfTryingToGetInfoAboutNullClockAlarm,
+	EModelfTryingToOrphanClockAlarm
+	};
+
+GLREF_C void Panic(TModelPanic aPanic);
+GLREF_C void Fault(TModelFault aFault);
+
+class MTimewModelObserver
+	{
+public:
+	virtual void HandleUpdate(TInt aNotification)=0;
+	};
+
+class CIntermediateObserver : public CBase, public MTimewModelObserver
+	{
+public:
+	CIntermediateObserver();
+	virtual void HandleUpdate(TInt aNotification);
+	void SetTimewModelObserver(MTimewModelObserver* aObserver);
+protected:
+	void Notify(TInt aNotification);
+private:
+	MTimewModelObserver* iObserver;
+	};
+
+class CIdleObserver : public CIntermediateObserver
+	{
+public:
+	CIdleObserver();
+	~CIdleObserver();
+	void ConstructL(MTimewModelObserver* aObserver,TInt aPriority);
+public:
+	void CancelIdleRefresh();
+	virtual void HandleUpdate(TInt aNotification);
+protected:
+	virtual void DoIdleCancel();
+	virtual void DoIdleNotify();
+private:
+	void StartIdleRefresh();
+	static TInt IdleCallBack(TAny* aPtr);
+private:
+	TInt iNotification;
+	CIdle* iIdle;
+	};
+
+class CModelResponder;
+class CModelBase : public CBase
+	{
+protected:
+	CModelBase();
+
+public:
+	~CModelBase();
+
+public:
+	void Stop();
+	void Start();
+	void SetTimewModelObserver(MTimewModelObserver* aObserver);
+
+protected:
+	void Notify(TInt aNotification);
+	virtual void ProcessResponder(TInt aStatus)=0;
+	void SetResponderActive(CModelResponder* aResponder);
+
+private:
+	void DoObserverNotify(TInt aNotification);
+
+private:
+	TBool iDoingViewNotify;
+	MTimewModelObserver* iObserver;
+	CModelResponder* iResponder;
+	friend class CModelResponder;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Inc/TestTimewBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,39 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewBase which is the base class for all
+// the Psd Agx suite test steps
+// 
+//
+
+#ifndef TEST_TIMEW_BASE_H
+#define TEST_TIMEW_BASE_H
+
+#include "almmod.h"
+#include <test/testexecutestepbase.h>
+
+
+class CTestTimewBase : public CTestStep
+{
+public:
+	CTestTimewBase();
+	~CTestTimewBase();
+	virtual enum TVerdict	doTestStepPreambleL();
+	virtual enum TVerdict	doTestStepPostambleL();	CAlmModel*				Model();
+
+private:
+	CActiveScheduler*	iSchedular;
+
+protected:	CAlmModel*			iModel;};
+
+#endif /* TEST_TIMEW_BASE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Inc/TestTimewServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewServer
+// 
+//
+
+#ifndef TEST_TIMEW_SERVER_H
+#define TEST_TIMEW_SERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+class  CTestTimewServer : public CTestServer
+{
+public:
+	static CTestTimewServer*	NewL();
+	virtual CTestStep*			CreateTestStep(const TDesC& aStepName);
+
+private:
+	void	ConstructL();
+};
+
+#endif /* TEST_TIMEW_SERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Inc/TestTimewSetAlarm.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewSetAlarm
+// 
+//
+
+#ifndef TEST_TIMEW_SET_ALARM_H
+#define TEST_TIMEW_SET_ALARM_H
+
+#include "TestTimewBase.h"
+#include <asshdalarm.h>
+
+class CTestTimewSetAlarm : public CTestTimewBase
+{
+public:
+	CTestTimewSetAlarm();
+	virtual ~CTestTimewSetAlarm();
+
+public:
+	virtual enum TVerdict doTestStepL( void );
+
+private:
+	void	SetAlarmL( void );
+	TASShdAlarm iAlarmData;
+};
+
+#endif /* TEST_TIMEW_SET_ALARM_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Scripts/Smoketest_Timew.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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 "Eclipse Public License v1.0"
+// which accompanies 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 Timew smoketest
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\timew.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Timew_Server
+//
+START_TESTCASE 8979
+RUN_TEST_STEP 1000	Smoketest_Timew_Server	SetAlarm		c:\Smoketest\Smoketest_Timew.ini	24560_SetAlarm
+END_TESTCASE 8979
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Scripts/setup_Smoketest_Timew.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+//
+
+RUN_UTILS MkDir c:\Smoketest\
+
+RUN_UTILS CopyFile z:\smoketest\smoketest_timew.ini	c:\smoketest\smoketest_timew.ini
+RUN_UTILS MakeReadWrite c:\smoketest\smoketest_timew.ini
+
+// RUN_SCRIPT Smoketest_Timew.script
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Src/SM_ALM.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,489 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "almmod.h"
+#include "sm_std.h"
+#include <ecom/ecom.h>
+
+//
+//	class CAlmModel
+//
+
+CAlmModel::CAlmModel()
+//
+//	Constructor
+//
+	{
+	}
+
+CAlmModel::~CAlmModel()
+//
+//	Destructor
+//
+	{
+	Stop();
+	iClockAlarms.ResetAndDestroy();
+	iClockAlarms.Close();
+	iReviewAlarmIds.Close();
+	iNextAlarmIds.Close();
+	iAlmSvr.Close();
+ 	REComSession::FinalClose();
+	}
+
+void CAlmModel::ConstructL(MTimewModelObserver* aObserver,TInt aResponderPriority)
+//
+//	Construct the alarm engine components
+//
+	{
+	SetTimewModelObserver(aObserver);
+	//
+	iReviewAlarmIds = RArray<TAlarmId>(KArrayOfAlarmIdsGranularity);
+	iNextAlarmIds = RArray<TAlarmId>(KArrayOfAlarmIdsGranularity);
+	//
+	const TInt r = iAlmSvr.Connect();
+	User::LeaveIfError(r);
+	//
+	TInt i;
+	iClockAlarms = RPointerArray<TASShdAlarm>(KMaxClockAlarms);
+	for(i=0; i<KMaxClockAlarms; i++)
+		{
+		TASShdAlarm* blankAlarm = new(ELeave) TASShdAlarm();
+		CleanupStack::PushL(blankAlarm);
+		User::LeaveIfError(iClockAlarms.Append(blankAlarm));
+		CleanupStack::Pop(blankAlarm);
+		}
+
+	// Identify any clock alarms in the alarm server and put them
+	// into the slots.
+
+	// Fetch
+	RArray<TAlarmId> clockIds(KMaxClockAlarms);
+	CleanupClosePushL(clockIds);
+	iAlmSvr.GetAlarmIdListForCategoryL(KASCliCategoryClock, clockIds);
+
+	// Put them in the slots - we can only display KMaxClockAlarms alarms
+	// so any beyond that are ignored.
+	TInt slotsUsedSoFar = 0;
+	const TInt count = Min(KMaxClockAlarms, clockIds.Count());
+	for(i=0; i<count; i++)
+		{
+		TASShdAlarm* alarm = iClockAlarms[slotsUsedSoFar];
+		User::LeaveIfError(iAlmSvr.GetAlarmDetails(clockIds[i], *alarm));
+
+		// Only show alarms which haven't yet notified
+		if	(alarm->State() != EAlarmStateNotified)
+			{
+			// If we don't do this, then the alarm slot is treated
+			// as available.
+			++slotsUsedSoFar;
+			alarm->ClientFlags().Set(EClockAlarmFlagsIsSet);
+			}
+		}
+	CleanupStack::PopAndDestroy(&clockIds);
+	//
+	CAlmResponder* pR=new(ELeave) CAlmResponder(iAlmSvr,*this,aResponderPriority);
+	SetResponderActive(pR);
+	}
+
+CAlmModel* CAlmModel::NewL(MTimewModelObserver* aObserver,TInt aResponderPriority)
+//
+//	Create a new alarm engine
+//
+	{
+	CAlmModel* model=new(ELeave) CAlmModel;
+	CleanupStack::PushL(model);
+	model->ConstructL(aObserver,aResponderPriority);
+	CleanupStack::Pop(model);
+	return(model);
+	}
+
+void CAlmModel::ProcessResponder(TInt aStatus)
+//
+//	Interpret responder status
+//
+	{
+	// FIX
+	if (aStatus!=KErrCancel && aStatus!=KErrNone)
+		Notify(aStatus);
+	else
+		Notify(0);
+	}
+
+TInt CAlmModel::AlarmQuietPeriodMinutes() const
+//
+//	Return the time that sound is delayed until
+//
+	{
+	TTime timeNow;
+	timeNow.HomeTime();
+	TTime timeQuiet=AlarmQuietPeriodEnd();
+	TInt quietMinutes;
+	if (timeQuiet<=timeNow || timeQuiet==Time::NullTTime())
+		quietMinutes=0;
+	else
+		{
+		TTimeIntervalMinutes minutes;
+		timeQuiet.MinutesFrom(timeNow,minutes);
+		quietMinutes=minutes.Int()+1;
+		}
+	return(quietMinutes);
+	}
+
+TInt CAlmModel::AlarmQuietPeriodSet(TInt aMinutes)
+//
+//	Delay alarm sounds for a given number of minutes
+//
+	{
+	TInt ret = KErrNone;
+	//
+	if	(!aMinutes)
+		ret = iAlmSvr.CancelAlarmSilence();
+	else
+		ret = iAlmSvr.SetAlarmSoundsSilentFor(TTimeIntervalMinutes(aMinutes));
+	//
+	return ret;
+	}
+
+TInt CAlmModel::ClockAlarmEnable(TInt aAlarmIndex, TTimeWClockAlarmState aClockAlarmState)
+//
+//	Enable or disable a clock alarm
+//
+	{
+	__ASSERT_DEBUG(aAlarmIndex < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	TAlarmStatus newStatus;
+	switch(aClockAlarmState)
+		{
+	case ETimeWClockAlarmStateNotSet:
+		return ClockAlarmDelete(aAlarmIndex);
+
+	case ETimeWClockAlarmStateSet:
+		newStatus = EAlarmStatusEnabled;
+		break;
+
+	default:
+	case ETimeWClockAlarmStateDisabled:
+		newStatus = EAlarmStatusDisabled;
+		break;
+		}
+
+	TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+	__ASSERT_ALWAYS(alarm->Id() != KNullAlarmId, Fault(EModelfTryingToChangeStateOfNullClockAlarm));
+	TInt error = iAlmSvr.SetAlarmStatus(alarm->Id(), newStatus);
+	if	(error != KErrNone)
+		return error;
+
+	// Refetch alarm from server (will update status)
+	error = iAlmSvr.GetAlarmDetails(alarm->Id(), *alarm);
+	if	(error == KErrNone)
+		alarm->ClientFlags().Set(EClockAlarmFlagsIsSet);
+	return error;
+	}
+
+TInt CAlmModel::ClockAlarmSet(TInt aAlarmIndex, const TASShdAlarm& aInfo)
+//
+//	Set a clock alarm
+//
+	{
+	__ASSERT_DEBUG(aAlarmIndex < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	TInt error = KErrNone;
+	TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+	if	(alarm->Id() != KNullAlarmId)
+		{
+		// There is already an alarm set in this slot. Delete
+		// the old, replace it with the new.
+		error = iAlmSvr.AlarmDelete(alarm->Id());
+		if	(error != KErrNone)
+			return error;
+		alarm->ClientFlags().Clear(EClockAlarmFlagsIsSet);
+		}
+
+	// Add alarm (will also update cached alarm details)
+	*alarm = aInfo;
+	alarm->Category() = KASCliCategoryClock;
+	error = iAlmSvr.AlarmAdd(*alarm);
+	if	(error == KErrNone)
+		alarm->ClientFlags().Set(EClockAlarmFlagsIsSet);
+	return error;
+	}
+
+TInt CAlmModel::ClockAlarmInfo(TInt aAlarmIndex,TASShdAlarm& aInfo)
+//
+//	Get information about a clock alarm
+//
+	{
+	__ASSERT_DEBUG(aAlarmIndex < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	TInt error = KErrNone;
+	aInfo = *(iClockAlarms[aAlarmIndex]);
+	if	(aInfo.Id() != KNullAlarmId && aInfo.ClientFlags().IsSet(EClockAlarmFlagsIsSet))
+		{
+		// Preserve flags
+		const TBitFlags16 flags = aInfo.ClientFlags();
+
+		// Fetch alarm details
+		error = iAlmSvr.GetAlarmDetails(aInfo.Id(), aInfo);
+
+		// Restore flags
+		if	(error == KErrNone)
+			{
+			// Has the alarm already notified?
+			if	(aInfo.State() != EAlarmStateQueued && aInfo.State() != EAlarmStateNotifying)
+				{
+				// Treat this slot as free
+				TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+				alarm->Reset();
+				aInfo = *alarm;
+				}
+			else
+				aInfo.ClientFlags() = flags;
+			}
+		else if (error == KErrNotFound)
+			{
+			// Alarm has been deleted
+			TASShdAlarm* alarm = iClockAlarms[aAlarmIndex];
+			alarm->Reset();
+			aInfo = *alarm;
+			}
+		}
+	return error;
+	}
+
+TInt CAlmModel::ClockAlarmDelete(TInt aClockAlarmNum)
+	{
+	__ASSERT_DEBUG(aClockAlarmNum < KMaxClockAlarms, Panic(EModelOutOfRange));
+	TASShdAlarm* alarm = iClockAlarms[aClockAlarmNum];
+	__ASSERT_ALWAYS(alarm->Id() != KNullAlarmId, Fault(EModelfTryingToChangeStateOfNullClockAlarm));
+	const TInt error = iAlmSvr.AlarmDelete(alarm->Id());
+	if	(error == KErrNone || error == KErrNotFound)
+		{
+		// Update cached representation of deleted alarm
+		alarm->Reset();
+		}
+	return error;
+	}
+
+TTimeWClockAlarmState CAlmModel::ClockAlarmState(TInt aClockAlarmNum) const
+	{
+	__ASSERT_DEBUG(aClockAlarmNum < KMaxClockAlarms, Panic(EModelOutOfRange));
+	//
+	const TASShdAlarm* alarm = iClockAlarms[aClockAlarmNum];
+	if	(alarm->ClientFlags().IsSet(EClockAlarmFlagsIsSet))
+		{
+		switch(alarm->Status())
+			{
+		case EAlarmStatusEnabled:
+			return ETimeWClockAlarmStateSet;
+		case EAlarmStatusDisabled:
+			return ETimeWClockAlarmStateDisabled;
+			}
+		}
+	return ETimeWClockAlarmStateNotSet;
+	}
+
+void CAlmModel::NextAlarmResetListL()
+//
+//	Fetch a list of ids of all the alarms that are pending
+//	within the alarm server.
+//
+	{
+	iAlmSvr.GetAlarmIdListByStateL(EAlarmStateQueued, iNextAlarmIds);
+	}
+
+void CAlmModel::NextAlarmClearList()
+	{
+	iNextAlarmIds.Reset();
+	}
+
+TInt CAlmModel::NextAlarmNumber() const
+	{
+	return iAlmSvr.NumberOfAlarmsActiveInQueue();
+	}
+
+TInt CAlmModel::NextAlarmDelete(TInt aIndex)
+//
+//	Delete one of the next alarms
+//
+	{
+	TInt ret = KErrNotFound;
+	if	(aIndex < iNextAlarmIds.Count())
+		{
+		const TAlarmId id = iNextAlarmIds[aIndex];
+		ret = iAlmSvr.AlarmDelete(id);
+		}
+	return ret;
+	}
+
+TBool CAlmModel::NextAlarmCanDelete(TInt aIndex) const
+//
+//	Determine whether can delete the specified alarm.
+//
+	{
+	__ASSERT_DEBUG(aIndex < iNextAlarmIds.Count(), Panic(EModelOutOfRange));
+	//
+	const TAlarmId id = iNextAlarmIds[aIndex];
+	//
+	TASShdAlarm alarm;
+	if	(iAlmSvr.GetAlarmDetails(id, alarm) == KErrNone)
+		{
+		return (
+			alarm.Category() == KASCliCategoryClock ||
+			alarm.State() == EAlarmStateSnoozed ||
+			!alarm.HasOwningSession()
+			);
+		}
+	return EFalse;
+	}
+
+TInt CAlmModel::NextAlarm(TFullName& aOwner, TASShdAlarm& aInfo) const
+//
+//	Get information about the next alarm
+//
+	{
+	aOwner = KNullDesC;
+	//
+	TAlarmId id = KNullAlarmId;
+	TInt ret = iAlmSvr.GetNextDueAlarmId(id);
+	if	(ret == KErrNone)
+		{
+		if	(id == KNullAlarmId)
+			{
+			aInfo.Reset();
+			ret = KErrNotFound;
+			}
+		else
+			{
+			ret = iAlmSvr.GetAlarmDetails(id, aInfo);
+			if	(ret == KErrNone)
+				ret = iAlmSvr.GetAlarmOwner(id, aOwner);
+			}
+		}
+	return ret;
+	}
+
+TInt CAlmModel::NextAlarmInfo(TInt aIndex, TFullName& aOwner, TASShdAlarm& aInfo) const
+//
+//	Get info about the next alarm
+//
+	{
+	TInt ret = KErrNotFound;
+	if	(aIndex < iNextAlarmIds.Count())
+		{
+		const TAlarmId id = iNextAlarmIds[aIndex];
+		ret = iAlmSvr.GetAlarmDetails(id, aInfo);
+		if	(ret == KErrNone)
+			{
+			ret = iAlmSvr.GetAlarmOwner(id, aOwner);
+			}
+		}
+	return ret;
+	}
+
+void CAlmModel::ReviewAlarmResetListL()
+	{
+	iAlmSvr.GetAlarmIdListByStateL(EAlarmStateNotified, iReviewAlarmIds);
+	}
+
+void CAlmModel::ReviewAlarmClearList()
+	{
+	iReviewAlarmIds.Reset();
+	}
+
+TInt CAlmModel::ReviewAlarmNumber() const
+	{
+	return iAlmSvr.AlarmCountByState(EAlarmStateNotified);
+	}
+
+TInt CAlmModel::ReviewAlarmInfo(TInt aIndex, TASShdAlarm& aInfo) const
+//
+//	Get information about a past alarm
+//
+	{
+	TInt ret = KErrNotFound;
+	if	(aIndex < iReviewAlarmIds.Count())
+		{
+		const TAlarmId id = iReviewAlarmIds[aIndex];
+		ret = iAlmSvr.GetAlarmDetails(id, aInfo);
+		}
+	return ret;
+	}
+
+void CAlmModel::AlarmSoundToggle()
+	{
+	TTimeWAlarmSoundState soundState = AlarmSoundState();
+	if	(soundState == ETimeWAlarmSoundOn)
+		AlarmSoundStateSet(EFalse);
+	else
+		AlarmSoundStateSet(ETrue);
+	}
+
+TInt CAlmModel::AlarmSoundStateSet(TBool aSoundOn)
+	{
+	TAlarmGlobalSoundState state = EAlarmGlobalSoundStateOn;
+	if	(!aSoundOn)
+		state = EAlarmGlobalSoundStateOff;
+
+	return iAlmSvr.SetAlarmSoundState(state);
+	}
+
+TTimeWAlarmSoundState CAlmModel::AlarmSoundState() const
+	{
+	// First check whether we're in a silent period
+	if	(iAlmSvr.AlarmSoundsTemporarilySilenced())
+		return ETimeWAlarmQuietPeriod;
+
+	// We're not, so check global sound state and map
+	// to TimeW settings
+	TAlarmGlobalSoundState state = EAlarmGlobalSoundStateOff;
+	if	(iAlmSvr.GetAlarmSoundState(state) == KErrNone)
+		{
+		if	(state == EAlarmGlobalSoundStateOn)
+			return ETimeWAlarmSoundOn;
+		}
+	return ETimeWAlarmSoundOff;
+	}
+
+TTime CAlmModel::AlarmQuietPeriodEnd() const
+	{
+	TTime endTime;
+	if	(iAlmSvr.GetAlarmSoundsSilentUntil(endTime) == KErrNone)
+		return endTime;
+	//
+	endTime.HomeTime();
+	return endTime;
+	}
+
+TInt CAlmModel::OrphanAlarmNumber() const
+	{
+	// Get the alarms
+	RArray<TAlarmId> clockIds(KMaxClockAlarms);
+	CleanupClosePushL(clockIds);
+	iAlmSvr.GetAlarmIdListForCategoryL(KASCliCategoryClock, clockIds);
+
+	//which are orphaned?
+	TInt count = clockIds.Count();
+	TInt orphaned = 0;
+	for	(TInt ii=0; ii<count; ii++)
+		{
+		TASShdAlarm alarm;
+		iAlmSvr.GetAlarmDetails(clockIds[ii], alarm);
+		if	(alarm.HasBecomeOrphaned())
+			orphaned++;
+		}
+	CleanupStack::PopAndDestroy(&clockIds);
+
+	return orphaned;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Src/SM_MOD.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,87 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "sm_std.h"
+
+CModelBase::CModelBase()
+//
+//	Protected constructor
+//
+	{
+	}
+
+CModelBase::~CModelBase()
+//
+//	destructor
+//
+	{
+	delete(iResponder);
+	}
+
+void CModelBase::Notify(TInt aNotification)
+//
+//	Funnel for all calls to the notifier
+//
+	{
+	if (!iDoingViewNotify && iObserver)
+		DoObserverNotify(aNotification);
+	}
+
+void CModelBase::DoObserverNotify(TInt aNotification)
+//
+//	Single function that actually calls the view notifier
+//
+	{
+	__ASSERT_DEBUG(iObserver,Fault(EModelfNoNotifier));
+	iDoingViewNotify=ETrue;
+	iObserver->HandleUpdate(aNotification);
+	iDoingViewNotify=EFalse;
+	}
+
+void CModelBase::SetResponderActive(CModelResponder* aResponder)
+//
+//	Set the engines responder
+//
+	{
+	iResponder=aResponder;
+	if (iResponder)
+		CActiveScheduler::Add(iResponder);
+	}
+
+void CModelBase::Start()
+//
+//	Start the responder
+//	The engine requires that an active scheduler be installed
+//
+	{
+	iResponder->Start();
+	}
+
+void CModelBase::Stop()
+//
+//	Stop the responder and the engine
+//
+	{
+	if (iResponder)
+		iResponder->Cancel();
+	}
+
+void CModelBase::SetTimewModelObserver(MTimewModelObserver *aObserver)
+//
+//	Register the observer of the engine
+//
+	{
+	iObserver=aObserver;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Src/SM_RSP.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "sm_std.h"
+#include "almmod.h"
+
+//
+//	class CModelResponder
+//
+
+CModelResponder::CModelResponder(CModelBase& aModel,TInt aPriority)
+//
+//	Base class constructor
+//
+	: CActive(aPriority), iModel(&aModel)
+	{
+	}
+
+void CModelResponder::NotifyModel(TInt aStatus)
+//
+//	Funnel all response to the engine
+//
+	{
+	iModel->ProcessResponder(aStatus);
+	}
+
+void CModelResponder::RunL()
+//
+//	Handle changes in the servers
+//
+	{
+//	Reset the status request before notifiying the view
+//	so that it can catch anything untoward that the view does
+	TInt v=iStatus.Int();
+	Start();
+	NotifyModel(v);
+	}
+
+void CModelResponder::Start()
+//
+//	Start the response
+//
+	{
+	if (!IsActive())
+		{
+		SetActive();
+		DoStart();
+		}
+	}
+
+//
+//	class CAlmResponder
+//
+
+CAlmResponder::CAlmResponder(RASCliSession& aSvr,CAlmModel& aModel,TInt aResponderPriority)
+//
+//	Protected constructor
+//
+	: CModelResponder(aModel,aResponderPriority),iAlmSvr(&aSvr)
+	{
+	}
+
+void CAlmResponder::DoStart()
+//
+//	Start a repsonse
+//
+	{
+	iAlmSvr->NotifyChange(iStatus, iAlarmId);
+	}
+
+void CAlmResponder::DoCancel()
+//
+//	Stop the response
+//
+	{
+	if	(iStatus == KRequestPending)
+		iAlmSvr->NotifyChangeCancel();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Src/SM_UTL.CPP	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,34 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "sm_std.h"
+
+
+GLDEF_C void Panic(TModelPanic aPanic)
+//
+//	Panic in the engine
+//
+	{
+	User::Panic(_L("TW-ENG-PANIC"),aPanic);
+	}
+
+GLDEF_C void Fault(TModelFault aFault)
+//
+//	Fault in the engine
+//
+	{
+	User::Panic(_L("TW-ENG-FAULT"),aFault);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Src/TestTimewBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,62 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewCase which is the base class for all the Timew TestCase DLL
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <test/testexecutelog.h>
+#include "TestTimewbase.h"
+
+CTestTimewBase::CTestTimewBase()
+: CTestStep()
+, iSchedular(NULL)
+, iModel(NULL)
+	{
+	}
+
+// destructor
+CTestTimewBase::~CTestTimewBase()
+	{
+	delete iSchedular;
+	iSchedular=NULL;
+	}
+
+enum TVerdict CTestTimewBase::doTestStepPreambleL()
+	{
+	iSchedular=new CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+
+	return CTestStep::doTestStepPreambleL();
+	}
+
+enum TVerdict CTestTimewBase::doTestStepPostambleL()
+	{
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+
+	return CTestStep::doTestStepPostambleL();
+	}
+
+CAlmModel*	CTestTimewBase::Model(void)
+/**
+returns a pointer to an instance of CAgnModel
+*/
+	{
+  	return iModel;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Src/TestTimewServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,106 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 main DLL entry point for the Smoketest_Timew.dll
+// 
+//
+
+
+// EPOC includes
+#include <e32base.h>
+
+#include "TestTimewServer.h"
+#include "TestTimewSetAlarm.h"
+
+
+_LIT(KServerName,"Smoketest_Timew_Server");
+
+CTestTimewServer* CTestTimewServer::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.
+ */
+	{
+	CTestTimewServer*	server = new (ELeave) CTestTimewServer();
+	CleanupStack::PushL(server);
+	// CServer base class call
+	server->StartL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler*	sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CTestTimewServer*	server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTestTimewServer::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());
+        if (!err) { }
+        
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+
+CTestStep* CTestTimewServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep*	testStep = NULL;
+
+	if(aStepName == _L("SetAlarm"))
+		testStep = new CTestTimewSetAlarm();
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/Src/TestTimewSetAlarm.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,84 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestTimewSetAlarm
+// 
+//
+
+#include <test/testexecuteclient.h>
+
+#include "TestTimewSetAlarm.h"
+
+
+_LIT(KHour,	"hour");
+_LIT(KMinute,"minute");
+_LIT(KMessage,"message");
+_LIT(KBells,"bells");
+
+
+// constructor
+CTestTimewSetAlarm::CTestTimewSetAlarm()
+	{
+	SetTestStepName(_L("SetAlarm"));
+	}
+
+// destructor
+CTestTimewSetAlarm::~CTestTimewSetAlarm()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestTimewSetAlarm::doTestStepL( void )
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("TEST-> SETTING AN ALARM"));
+		TRAPD(r, SetAlarmL());
+
+	if (r!=KErrNone)
+		SetTestStepResult(EFail);
+
+	// test steps return a result
+	return TestStepResult();
+	}
+
+void CTestTimewSetAlarm::SetAlarmL( void )
+	{
+	TInt	hour;
+	TInt	minute;
+	TPtrC	ptrMessage;
+
+	TTime alarmTime;
+	alarmTime.HomeTime();
+
+	if ( !GetIntFromConfig(ConfigSection(), KHour(), hour) )
+		hour=alarmTime.DateTime().Hour();
+
+	if ( !GetIntFromConfig(ConfigSection(), KMinute(), minute) )
+		minute=0;
+
+	GetStringFromConfig(ConfigSection(), KMessage(), ptrMessage);
+
+
+	TDateTime dateTime=alarmTime.DateTime();
+	dateTime.SetHour(hour);
+	dateTime.SetMinute(minute);
+	dateTime.SetSecond(0);
+	dateTime.SetMicroSecond(0);
+	iAlarmData.NextDueTime()=dateTime;
+	iAlarmData.RepeatDefinition()=(TAlarmRepeatDefinition)EAlarmRepeatDefintionRepeatNext24Hours;
+	iAlarmData.Message() = ptrMessage;
+	iAlarmData.SoundName()=KBells();
+	iModel = CAlmModel::NewL(NULL,KPriorityAlarmResponder);
+	Model()->ClockAlarmSet(0,iAlarmData);
+	delete iModel;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/TestData/Smoketest_Timew.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,5 @@
+[24560_SetAlarm]
+hour			=9
+min			=0
+message			=make a cup of tea
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/bmarm/CONSOLEALARMALERTSERVERU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,2 @@
+EXPORTS
+	StartConsoleAlarmAlertServerL__23ConsoleAlarmAlertServerPv @1 NONAME ; public: static void __cdecl ConsoleAlarmAlertServer::StartConsoleAlarmAlertServerL(void *)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/bwins/CONSOLEALARMALERTSERVERU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	?StartConsoleAlarmAlertServerL@ConsoleAlarmAlertServer@@SAXPAX@Z @ 1 NONAME ; public: static void __cdecl ConsoleAlarmAlertServer::StartConsoleAlarmAlertServerL(void *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/bwins/SMOKETEST_TIMEW_SERVERU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	?NewServer@@YAHXZ @ 1 NONAME ; int __cdecl NewServer(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Timew/eabi/ConsoleAlarmAlertServerU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,11 @@
+EXPORTS
+	_ZN23ConsoleAlarmAlertServer29StartConsoleAlarmAlertServerLEPv @ 1 NONAME
+	_ZTI24CConsoleAlarmAlertServer @ 2 NONAME ; #<TI>#
+	_ZTI25CConsoleAlarmAlertConsole @ 3 NONAME ; #<TI>#
+	_ZTI25CConsoleAlarmAlertSession @ 4 NONAME ; #<TI>#
+	_ZTI28CConsoleAlarmAlertLEDFlasher @ 5 NONAME ; #<TI>#
+	_ZTV24CConsoleAlarmAlertServer @ 6 NONAME ; #<VT>#
+	_ZTV25CConsoleAlarmAlertConsole @ 7 NONAME ; #<VT>#
+	_ZTV25CConsoleAlarmAlertSession @ 8 NONAME ; #<VT>#
+	_ZTV28CConsoleAlarmAlertLEDFlasher @ 9 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Inc/SmokeTestActive.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,115 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestActive
+// 
+//
+
+#if (!defined __SMOKETEST_ACTIVE_H__)
+#define __SMOKETEST_ACTIVE_H__
+
+#include <e32base.h>
+
+/**
+ * Multimedia test timer completion callback
+ */
+class MTestActiveCallback
+	{
+public:
+	/**
+	* Method from which CTestActive informs the user RunL call
+	*/
+	virtual void	RunL() = 0;
+	/**
+	* Method from which CTestActive informs the user DoCancel call
+	*/
+	virtual void	DoCancel() = 0;
+	};
+
+/**
+ * Test Active Notification class
+ *
+ */
+class CTestActive : public CActive
+{
+public:
+	/**
+	* Destructor
+	*/
+	IMPORT_C virtual ~CTestActive();
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Active object whos actions are performed by a callback
+	*
+	* \param aTestActiveCallback object to inform on RunL.
+	* \param aPriority priority of active object.
+	* \return New Callback active object.
+	*/
+	IMPORT_C static CTestActive*	NewL(MTestActiveCallback& aTestActiveCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Active object whos actions are performed by a callback
+	*
+	* \param aTestActiveCallback object to inform on RunL.
+	* \param aPriority priority of active object.
+	* \return New Callback active object.
+	*/
+	IMPORT_C static CTestActive*	NewLC(MTestActiveCallback& aTestActiveCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Activate the object
+	*/
+	IMPORT_C void					Activate();
+
+	/**
+	* Active object RunL implementation.
+	*
+	* Calls the MTestActiveCallback::RunL to inform user that the RunL has been reached.
+	*/
+	void	RunL();
+	/**
+	* Active object DoCancel implementation.
+	*
+	* Calls the MTestActiveCallback::DoCancel to inform user that the DoCancel has been reached.
+	*/
+	void	DoCancel();
+
+protected:
+	/**
+	* Protected constructor with timer completion callback and priority.
+	*
+	* Called by two phase constructor.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	*/
+	CTestActive(MTestActiveCallback& aTestActiveCallback, TInt aPriority);
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*
+	* Second phase of two phase constructor.
+	*/
+	void	ConstructL();
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*/
+	MTestActiveCallback&	iTestActiveCallback;
+};
+
+#endif /* __SMOKETEST_ACTIVE_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Inc/SmokeTestProperty.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,93 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestProperty
+// 
+//
+
+#if (!defined __SMOKETEST_PROPERTY_H__)
+#define __SMOKETEST_PROPERTY_H__
+
+// EPOC includes
+#include <test/testexecutestepbase.h>
+#include <e32property.h>
+
+/**
+ This class contains generic utility method to set system wide variable usign publish and subscribe
+*/
+class CTestProperty : public CBase
+{
+public:
+	IMPORT_C CTestProperty(CTestStep& aTestStep);
+	IMPORT_C ~CTestProperty();
+
+	/**
+	* Set a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key
+	*/
+	IMPORT_C TInt SetPropertyL(const TUid aCategory, const TInt aKey, const TInt aValue);
+
+	/**
+	* Set a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key
+	*/
+	IMPORT_C TInt SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC8& aValue);
+
+	/**
+	* Set a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key
+	*/
+	IMPORT_C TInt SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC16& aValue);
+
+	/**
+	* Get a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key returned
+	*/
+	IMPORT_C TInt GetPropertyL(const TUid aCategory, const TInt aKey, TInt& aValue);
+
+	/**
+	* Get a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key returned
+	*/
+	IMPORT_C TInt GetPropertyL(const TUid aCategory, const TInt aKey, TDes8& aValue);
+
+	/**
+	* Get a property
+	*
+	* \param aCategory catagory of the RProperty
+	* \param aKey key of the catagory
+	* \param aValue value of the key returned
+	*/
+	IMPORT_C TInt GetPropertyL(const TUid aCategory, const TInt aKey, TDes16& aValue);
+
+private:
+	CTestStep&	iTestStep;
+	RProperty	iProperty;
+};
+
+#endif /* __SMOKETEST_PROPERTY_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Inc/SmokeTestSecureFSclient.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,34 @@
+// 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:
+//
+
+#ifndef __SMOKETEST_SECURE_FS_CLIENT_H__
+#define __SMOKETEST_SECURE_FS_CLIENT_H__
+
+#include <e32std.h>
+
+class RTestSecureFSclient : public RSessionBase
+	{
+public:
+	IMPORT_C TInt Connect();
+	IMPORT_C TInt SetHomeTime(const TTime& aTime);
+	IMPORT_C TInt DeleteFileL(const TDesC& aFileName);
+	IMPORT_C void KillProcessL(const TDesC& aProcessName);
+	IMPORT_C TInt ChangeLocaleName(const TDesC& aLocaleDllName);
+	IMPORT_C TInt CheckForFile(const TDesC& aFileName);
+    IMPORT_C TInt CopyFile(const TDesC& Source, const TDesC& Dest);
+    IMPORT_C void SetUpFbs();
+	};
+
+#endif // __SMOKETEST_SECURE_FS_CLIENT_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Inc/SmokeTestSecureFSclientserver.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,40 @@
+// 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:
+// clientserver - shared client/server definitions
+// 
+//
+
+#ifndef __SMOKETEST_SECURE_FS_CLIENT_SERVER_H__
+#define __SMOKETEST_SECURE_FS_CLIENT_SERVER_H__
+
+#include <e32std.h>
+
+_LIT(KTestServerName,"SmokeTestSecureFSserver");
+_LIT(KTestServerImg,"SmokeTestSecureFSserver");		// EXE name
+const TUid KServerUid3={0x101FF346};
+
+const TInt KMaxTestMessage=8;
+
+enum TTestIpc
+	{
+	ETestIpcSetHomeTime,
+	ETestIpcDeleteFile,
+	ETestIpcKillProcess,
+	ETestIpcChangeLocale,
+	ETestIpcCheckForFile,
+    ETestIpcCopyFile,
+    ETestIpcSetUpFbs,
+	};
+
+#endif // __SMOKETEST_SECURE_FS_CLIENT_SERVER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Inc/SmokeTestSecureFSserver.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// 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:
+// TestServer - server classes
+// 
+//
+
+#ifndef __SMOKETEST_SECURE_FS_SERVER_H__
+#define __SMOKETEST_SECURE_FS_SERVER_H__
+
+#include <e32base.h>
+#include "SmokeTestSecureFSclientserver.h"
+
+enum TTestPanic
+	{
+	EPanicBadDescriptor,
+	EPanicIllegalFunction,
+	EPanicAlreadyReceiving
+	};
+
+void PanicClient(const RMessage2& aMessage,TTestPanic TMyPanic);
+
+class CTestSecureFSshutdown : public CTimer
+	{
+	enum {KMyShutdownDelay=0x500000};	// approx 5s
+public:
+	inline CTestSecureFSshutdown();
+	inline void ConstructL();
+	inline void Start();
+private:
+	void RunL();
+	};
+
+class CTestSecureFSserver : public CServer2
+	{
+public:
+	static CServer2* NewLC();
+	void AddSession();
+	void DropSession();
+	void Send(const TDesC& aMessage);
+private:
+	CTestSecureFSserver();
+	void ConstructL();
+	// CSharableSession* NewSessionL(const TVersion& aVersion, const RMessage& aMessage) const;
+        CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+private:
+	TInt iSessionCount;
+	CTestSecureFSshutdown iShutdown;
+	};
+
+//class CTestSecureFSSession : public CSharableSession
+class CTestSecureFSSession : public CSession2
+	{
+public:
+	CTestSecureFSSession();
+	void CreateL();
+	void Send(const TDesC& aMessage);
+private:
+	~CTestSecureFSSession();
+	inline CTestSecureFSserver& Server();
+	void ServiceL(const RMessage2& aMessage);
+	void ServiceError(const RMessage2& aMessage,TInt aError);
+	inline TBool ReceivePending() const;
+private:
+	void DoSetHomeTime(const RMessage2& aMessage);
+	
+	// General File Manipulation
+	TInt DoDeleteFileL(const RMessage2& aMessage);
+
+	// Power User
+	void DoKillProcess(const RMessage2& aMessage);
+	TInt DoChangeLocale(const RMessage2& aMessage);
+	TInt DoCheckForFile(const RMessage2& aMessage);
+	TInt DoCopyFile(const RMessage2& aMessage);
+	void DoSetUpFbs();
+
+private:
+	RMessage2 iReceive;
+	};
+
+#endif // __SMOKETEST_SECURE_FS_SERVER_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Inc/SmokeTestTimeOutTimer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,102 @@
+// 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"
+// which accompanies 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 contains CTestTimeOutTimer
+// 
+//
+
+#if (!defined __SMOKETEST_TIMEOUT_TIMER_H_)
+#define __SMOKETEST_TIMEOUT_TIMER_H_
+
+#include <e32base.h>
+
+/**
+ * Multimedia test timer completion callback
+ */
+class MTestTimeOutTimerCallback
+	{
+public:
+	/**
+	* Method from which CTestTimeOutTimer informs the user of the timer completion.
+	*/
+	virtual void TimerCompleted() = 0;
+	};
+
+/**
+ * Multimedia test timer active object.
+ *
+ * On timer completion MTestTimeOutTimerCallback::TimerCompleted is called
+ * to inform the user off the completion
+ */
+class CTestTimeOutTimer : public CTimer  
+{
+public:
+	/**
+	* Destructor
+	*/
+	IMPORT_C virtual ~CTestTimeOutTimer();
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Multimedia timer a timer completion callback and priority.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	* \return New Multimedia test timer active object.
+	*/
+	IMPORT_C static CTestTimeOutTimer*	NewL(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Two phase constructor that allocates and constructs
+	* a new Multimedia timer a timer completion callback and priority.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	* \return New Multimedia test timer active object.
+	*/
+	IMPORT_C static CTestTimeOutTimer*	NewLC(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority=EPriorityStandard);
+
+	/**
+	* Active object RunL implementation.
+	*
+	* Calls the MTestTimeOutTimerCallback::TimerCompleted to inform user that the timer has completed.
+	*/
+	void	RunL();
+
+protected:
+	/**
+	* Protected constructor with timer completion callback and priority.
+	*
+	* Called by two phase constructor.
+	*
+	* \param aTestTimerCallback object to inform on timer completion.
+	* \param aPriority priority of active object.
+	*/
+	CTestTimeOutTimer(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority);
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*
+	* Second phase of two phase constructor.
+	*/
+	void	ConstructL();
+
+private:
+	/**
+	* This is internal and not intended for use.
+	*/
+	MTestTimeOutTimerCallback&	iTestTimerCallback;
+};
+
+#endif /* __SMOKETEST_TIMEOUT_TIMER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Inc/TestStepSmokeTest.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,80 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestStepSmokeTest
+// 
+//
+
+#if (!defined __TEST_STEP_SMOKETEST_H__)
+#define __TEST_STEP_SMOKETEST_H__
+
+//TEF include
+#include <test/testexecutestepbase.h>
+#include "Configuration.cfg"
+
+enum TTestLoggingDetail
+	{
+	ETestLoggingDetail_Min,
+	ETestLoggingDetail_Normal,
+	ETestLoggingDetail_Max,
+	};
+
+#if (defined __VERSION_70S__)
+enum TCapability
+	{
+	ECapabilityTCB				= 0,
+	};
+#endif
+
+/**
+ This class is the base class for all the test steps in smoketest.
+*/
+class CTestStepSmokeTest : public CTestStep
+	{
+public:
+	//Destructor
+	IMPORT_C virtual ~CTestStepSmokeTest();
+
+	/**
+	 Pure virtual, to be implemented by the derived test steps.
+	 It implements the required functionality of the test step.
+	 @return TVerdict - result of the test step
+	 @leave - System wide error codes
+	*/
+	IMPORT_C virtual enum TVerdict	doTestStepL() = 0;
+
+	//Implements the preoperational functionalities for a test step
+	IMPORT_C virtual enum TVerdict	doTestStepPreambleL();
+
+	//Implements the post operational fucntionalities for a test step
+	IMPORT_C virtual enum TVerdict	doTestStepPostambleL();
+
+	TTestLoggingDetail		LoggingDetail() const { return iLoggingDetail; }
+	TInt					Repetition() const { return iRepetition; }
+
+protected:
+	//Constructor
+	IMPORT_C CTestStepSmokeTest();
+
+	//Gets the TCapability value for the capabilty string literal
+	IMPORT_C TInt			GetCapability(TPtrC aCapability, TCapability& aCapabilityValue);
+
+	//Verifies the given time is nearly eaual to current UTC time
+	IMPORT_C TBool			VerifyUTCTime(TTime aTime);
+
+private:
+	TTestLoggingDetail			iLoggingDetail;
+	TInt						iRepetition;
+	};
+
+#endif /* __TEST_STEP_SMOKETEST_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Src/SmokeTestActive.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,69 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// SmokeTestTestActive.h
+// This contains CTestActive
+// 
+//
+
+#include "SmokeTestActive.h"
+
+
+//
+// Construction/Destruction
+//
+
+EXPORT_C CTestActive::~CTestActive()
+	{
+	}
+
+EXPORT_C CTestActive* CTestActive::NewL(MTestActiveCallback& aTestActiveCallback, TInt aPriority)
+	{
+	CTestActive*	self=NewLC(aTestActiveCallback, aPriority);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C CTestActive* CTestActive::NewLC(MTestActiveCallback& aTestActiveCallback, TInt aPriority)
+	{
+	CTestActive*	self=new(ELeave) CTestActive(aTestActiveCallback, aPriority);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C void CTestActive::Activate()
+	{
+	SetActive();
+	}
+
+CTestActive::CTestActive(MTestActiveCallback& aTestActiveCallback, TInt aPriority)
+:	CActive(aPriority)
+,	iTestActiveCallback(aTestActiveCallback)
+	{
+	}
+
+void CTestActive::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CTestActive::RunL()
+	{
+	iTestActiveCallback.RunL();
+	}
+
+void CTestActive::DoCancel()
+	{
+	iTestActiveCallback.DoCancel();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Src/SmokeTestProperty.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,140 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestProperty
+// 
+//
+
+#include "SmokeTestProperty.h"
+
+// EPOC32 include
+#include <e32base.h>
+
+EXPORT_C CTestProperty::CTestProperty(CTestStep& aTestStep)
+:	CBase()
+,	iTestStep(aTestStep)
+	{
+	}
+
+EXPORT_C CTestProperty::~CTestProperty()
+	{
+	}
+
+EXPORT_C TInt CTestProperty::SetPropertyL(const TUid aCategory, const TInt aKey, const TInt aValue)
+	{
+	//Define the property, in case it is being used for the first time.
+	TInt	ret=RProperty::Define(aCategory, aKey, RProperty::EInt);
+	if ( (ret==KErrNone) || (ret== KErrAlreadyExists) )
+		{
+		//Attach to the property so that you can track any chnages to it.
+		ret=iProperty.Attach(aCategory, aKey);
+		if ( ret==KErrNone )
+			{
+			//Set the new test number and wait until the change is in effect.
+			TRequestStatus	status;
+			iProperty.Subscribe(status);
+			ret=iProperty.Set(aCategory, aKey, aValue);
+			if ( ret==KErrNone )
+				{
+				User::WaitForRequest(status);
+				ret=status.Int();
+				if ( ret != KErrNone )
+					{
+					iTestStep.INFO_PRINTF2(_L("request complete error=%d"), ret);
+					}
+				}
+			else
+				{
+				iTestStep.INFO_PRINTF2(_L("RProperty::Set error=%d"), ret);
+				}
+			iProperty.Close();
+			}
+		else
+			{
+			iTestStep.INFO_PRINTF2(_L("RProperty::Attach error=%d"), ret);
+			}
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF2(_L("RProperty::Define error=%d"), ret);
+		}
+
+	return ret;
+	}
+
+EXPORT_C TInt CTestProperty::SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC8& aValue)
+	{
+	//Define the property, in case it is being used for the first time.
+	TInt	ret=RProperty::Define(aCategory, aKey, RProperty::EByteArray);
+	if ( (ret==KErrNone) || (ret== KErrAlreadyExists) )
+		{
+		//Attach to the property so that you can track any chnages to it.
+		ret=iProperty.Attach(aCategory, aKey);
+		if ( ret==KErrNone )
+			{
+			//Set the new test number and wait until the change is in effect.
+			TRequestStatus	status;
+			iProperty.Subscribe(status);
+			ret=iProperty.Set(aCategory, aKey, aValue);
+			if ( ret==KErrNone )
+				{
+				User::WaitForRequest(status);
+				ret=status.Int();
+				}
+			iProperty.Close();
+			}
+		}
+
+	return ret;
+	}
+
+EXPORT_C TInt CTestProperty::SetPropertyL(const TUid aCategory, const TInt aKey, const TDesC16& aValue)
+	{
+	//Define the property, in case it is being used for the first time.
+	TInt	ret=RProperty::Define(aCategory, aKey, RProperty::EText);
+	if ( (ret==KErrNone) || (ret== KErrAlreadyExists) )
+		{
+		//Attach to the property so that you can track any chnages to it.
+		ret=iProperty.Attach(aCategory, aKey);
+		if ( ret==KErrNone )
+			{
+			//Set the new test number and wait until the change is in effect.
+			TRequestStatus	status;
+			iProperty.Subscribe(status);
+			ret=iProperty.Set(aCategory, aKey, aValue);
+			if ( ret==KErrNone )
+				{
+				User::WaitForRequest(status);
+				ret=status.Int();
+				}
+			iProperty.Close();
+			}
+		}
+
+	return ret;
+	}
+
+EXPORT_C TInt CTestProperty::GetPropertyL(const TUid aCategory, const TInt aKey, TInt& aValue)
+	{
+	return RProperty::Get(aCategory, aKey, aValue);
+	}
+
+EXPORT_C TInt CTestProperty::GetPropertyL(const TUid aCategory, const TInt aKey, TDes8& aValue)
+	{
+	return RProperty::Get(aCategory, aKey, aValue);
+	}
+
+EXPORT_C TInt CTestProperty::GetPropertyL(const TUid aCategory, const TInt aKey, TDes16& aValue)
+	{
+	return RProperty::Get(aCategory, aKey, aValue);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Src/SmokeTestSecureFSclient.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,113 @@
+// 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"
+// which accompanies 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 Server - client interface implementation
+// 
+//
+
+#include <e32std.h>
+#include <e32math.h>
+#include "SmokeTestSecureFSclientserver.h"
+#include "SmokeTestSecureFSclient.h"
+
+static TInt StartServer()
+//
+// Start the server process. Simultaneous launching
+// of two such processes should be detected when the second one attempts to
+// create the server object, failing with KErrAlreadyExists.
+//
+	{
+	const TUidType serverUid(KNullUid,KNullUid,KServerUid3);
+
+
+	RProcess server;
+	TInt r=server.Create(KTestServerImg, KNullDesC, serverUid);
+
+	if (r!=KErrNone)
+		return r;
+	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
+	r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+	server.Close();
+	return r;
+	}
+
+EXPORT_C TInt RTestSecureFSclient::Connect()
+	{// Connect to the server, attempting to start it if necessary
+	TInt retry=2;
+	for (;;)
+		{
+		TInt r=CreateSession(KTestServerName,TVersion(0,0,0),1);
+		if (r!=KErrNotFound && r!=KErrServerTerminated)
+			return r;
+		if (--retry==0)
+			return r;
+		r=StartServer();
+		if (r!=KErrNone && r!=KErrAlreadyExists)
+			return r;
+		User::After(1000000); //Let server load up (in EKA2)
+
+		}
+	}
+
+EXPORT_C TInt RTestSecureFSclient::SetHomeTime(const TTime& aTime) 
+	{
+	TPckg<TTime> pckg(aTime);
+	return SendReceive(ETestIpcSetHomeTime,TIpcArgs(&pckg));
+	}
+
+EXPORT_C TInt RTestSecureFSclient::DeleteFileL(const TDesC& aFileName)
+	{
+	TIpcArgs args(&aFileName);
+	return SendReceive(ETestIpcDeleteFile,args);
+	}
+
+EXPORT_C void RTestSecureFSclient::KillProcessL(const TDesC& aProcessName)
+	{
+	TIpcArgs args(&aProcessName);
+	User::LeaveIfError(SendReceive(ETestIpcKillProcess,args));
+	}
+
+EXPORT_C TInt RTestSecureFSclient::ChangeLocaleName(const TDesC& aLocaleDllName)
+	{
+	TIpcArgs args(&aLocaleDllName);
+	return SendReceive(ETestIpcChangeLocale,args);
+	}
+
+EXPORT_C TInt RTestSecureFSclient::CheckForFile(const TDesC& aFileName)
+    {
+	TIpcArgs args(&aFileName); 
+	return SendReceive(ETestIpcCheckForFile,args);  
+    }
+    
+EXPORT_C TInt RTestSecureFSclient::CopyFile(const TDesC& Source, const TDesC& Dest)
+    {
+	TIpcArgs args(&Source, &Dest); 
+	return SendReceive(ETestIpcCopyFile,args);  
+    }
+    
+EXPORT_C void RTestSecureFSclient::SetUpFbs()
+    {
+	SendReceive(ETestIpcSetUpFbs);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Src/SmokeTestSecureFSserver.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,393 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestServer - server implementation
+// 
+//
+
+#include "e32std.h"
+#include "SmokeTestSecureFSserver.h"
+#include <f32file.h>
+
+TRequestStatus aStatus;
+TRequestStatus* aSt = &aStatus;
+
+
+inline CTestSecureFSshutdown::CTestSecureFSshutdown()
+	:CTimer(-1)
+	{CActiveScheduler::Add(this);}
+inline void CTestSecureFSshutdown::ConstructL()
+	{CTimer::ConstructL();}
+inline void CTestSecureFSshutdown::Start()
+	{After(KMyShutdownDelay);}
+
+inline CTestSecureFSserver::CTestSecureFSserver()
+	:CServer2(0,ESharableSessions)
+	{}
+
+inline CTestSecureFSSession::CTestSecureFSSession()
+	{}
+inline CTestSecureFSserver& CTestSecureFSSession::Server()
+	{return *static_cast<CTestSecureFSserver*>(const_cast<CServer2*>(CSession2::Server()));}
+inline TBool CTestSecureFSSession::ReceivePending() const
+	{return !iReceive.IsNull();}
+
+//
+
+void CTestSecureFSSession::CreateL()
+//
+// 2nd phase construct for sessions - called by the CServer framework
+//
+	{
+	//RDebug::Print(_L("Server::CTestSecureFSSession::CreateL - start"));
+
+	Server().AddSession();
+	//RDebug::Print(_L("Server::CTestSecureFSSession::CreateL - end"));
+	}
+
+CTestSecureFSSession::~CTestSecureFSSession()
+	{
+	Server().DropSession();
+	}
+
+void CTestSecureFSSession::Send(const TDesC& aMessage)
+//
+// Deliver the message to the client, truncating if required
+// If the write fails, panic the client, not the sender
+//
+	{
+	if (ReceivePending())
+		{
+		TPtrC m(aMessage);
+		if (iReceive.Int1()<aMessage.Length())
+			m.Set(m.Left(iReceive.Int1()));
+		TInt r=iReceive.Write(0,m);
+		if (r==KErrNone)
+			iReceive.Complete(KErrNone);
+		else
+			PanicClient(iReceive,EPanicBadDescriptor);
+		}
+	}
+
+void CTestSecureFSSession::ServiceL(const RMessage2& aMessage)
+//
+// Handle a client request.
+// Leaving is handled by CMyServer::ServiceError() which reports
+// the error code to the client
+//
+	{
+	TInt result = KErrNone;
+
+	switch (aMessage.Function())
+		{
+	case ETestIpcSetHomeTime:
+		DoSetHomeTime(aMessage);
+		break;
+
+	case ETestIpcDeleteFile:
+		result = DoDeleteFileL(aMessage);
+		break;
+	
+	case ETestIpcKillProcess:
+		DoKillProcess(aMessage);
+		break;
+
+	case ETestIpcChangeLocale:
+		result = DoChangeLocale(aMessage);
+		break;
+		
+	case ETestIpcCheckForFile:
+	    result = DoCheckForFile(aMessage);
+	    break;
+	    
+	case ETestIpcCopyFile:
+	    result = DoCopyFile(aMessage);
+	    break; 
+	    
+	case ETestIpcSetUpFbs:
+	    DoSetUpFbs(); 
+	    break;
+	     
+	default:
+		PanicClient(aMessage,EPanicIllegalFunction);
+		break;
+		}
+	aMessage.Complete(result);
+	}
+
+//
+
+void CTestSecureFSSession::DoSetHomeTime(const RMessage2& aMessage)
+	{
+	TPckgBuf<TTime> pckg;
+	aMessage.Read(0,pckg);
+	User::SetHomeTime(pckg());
+	}
+
+TInt CTestSecureFSSession::DoDeleteFileL(const RMessage2& aMessage)
+	{
+	RFs fs;
+	TFileName* const fileName=new(ELeave) TFileName;
+	CleanupStack::PushL(fileName);
+	User::LeaveIfError(fs.Connect());
+
+	CleanupClosePushL(fs);
+	aMessage.ReadL(0,*fileName);
+	TInt err=fs.Delete(*fileName);
+	if (!(err==KErrNone || err==KErrNotFound || err==KErrPathNotFound)) // ignore not found error
+		{
+		User::Leave(err);
+		}
+	CleanupStack::PopAndDestroy(&fs);
+	CleanupStack::PopAndDestroy(fileName);
+	return err;
+	}
+
+void CTestSecureFSSession::DoKillProcess(const RMessage2& aMessage)
+	{
+	TFullName* name = new(ELeave) TFullName;
+	CleanupStack::PushL(name);
+
+	aMessage.ReadL(0,*name);
+	TFindProcess* finder = new (ELeave) TFindProcess(*name);
+	CleanupStack::PushL(finder);
+	RProcess* process = new (ELeave) RProcess;
+	CleanupStack::PushL(process);
+
+	if (finder->Next(*name) == KErrNone)
+		{
+		if (process->Open(*name) == KErrNone)
+			{
+			process->Kill(KErrNone);
+			}
+		}
+
+	if (process != NULL)
+		{
+		process->Close();
+		}
+	CleanupStack::PopAndDestroy(process);
+	CleanupStack::PopAndDestroy(finder);
+	CleanupStack::PopAndDestroy(name);		
+	}
+
+
+TInt CTestSecureFSSession::DoChangeLocale(const RMessage2& aMessage)
+	{
+	TBuf<50> locname;
+	TInt result;
+	aMessage.ReadL(0,locname);
+
+	result = UserSvr::ChangeLocale(locname);
+
+	return result;
+	}
+
+TInt CTestSecureFSSession::DoCheckForFile(const RMessage2& aMessage)
+{
+    RFs fs;
+    TInt err;
+	TFileName* const fileName=new(ELeave) TFileName;
+	CleanupStack::PushL(fileName);
+	User::LeaveIfError(fs.Connect());
+
+	CleanupClosePushL(fs);
+	aMessage.ReadL(0,*fileName);
+	
+	TUint attribs;
+	err=fs.Att(*fileName, attribs);
+	fs.Close();
+		
+	CleanupStack::PopAndDestroy(&fs);
+	CleanupStack::PopAndDestroy(fileName);
+	return err;
+	
+}
+
+TInt CTestSecureFSSession::DoCopyFile(const RMessage2& aMessage)
+{
+
+    RFs fs;
+    TInt result;
+ 
+    User::LeaveIfError(fs.Connect());
+    CleanupClosePushL(fs);
+
+    TFileName fileSource;
+    TFileName fileDest;
+
+    aMessage.ReadL(0,fileSource);
+    aMessage.ReadL(1,fileDest);
+    	   
+	CFileMan* fileMan = NULL;
+	
+	fileMan = CFileMan::NewL(fs);
+	CleanupStack::PushL( fileMan );
+	
+	fs.MkDirAll(fileDest);
+	result = fileMan->Copy( fileSource, fileDest, CFileMan::EOverWrite );
+	
+	User::LeaveIfError(fs.Connect());
+	fs.SetAtt(fileDest,KEntryAttNormal,KEntryAttReadOnly);
+	fs.Close();
+
+    CleanupStack::PopAndDestroy(fileMan);
+    CleanupStack::PopAndDestroy(&fs);
+	return result;
+	
+}
+
+void CTestSecureFSSession::DoSetUpFbs()
+{
+//	FbsStartup();
+//    User::LeaveIfError( RFbsSession::Connect() );
+//   CleanupStack::PushL( TCleanupItem( TCleanupOperation(&RFbsSession::Disconnect ), NULL ) );
+}
+
+//
+
+void CTestSecureFSSession::ServiceError(const RMessage2& aMessage,TInt aError)
+//
+// Handle an error from CMySession::ServiceL()
+// 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,EPanicBadDescriptor);
+	CSession2::ServiceError(aMessage,aError);
+	}
+
+void CTestSecureFSshutdown::RunL()
+//
+// Initiate server exit when the timer expires
+//
+	{
+	CActiveScheduler::Stop();
+	}
+
+CServer2* CTestSecureFSserver::NewLC()
+	{
+	CTestSecureFSserver* self=new(ELeave) CTestSecureFSserver;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CTestSecureFSserver::ConstructL()
+//
+// 2nd phase construction - ensure the timer and server objects are running
+//
+	{
+	StartL(KTestServerName);
+	iShutdown.ConstructL();
+	// ensure that the server still exits even if the 1st client fails to connect
+	iShutdown.Start();
+	}
+
+
+CSession2* CTestSecureFSserver::NewSessionL(const TVersion&,const RMessage2&) const
+//
+// Cretae a new client session. This should really check the version number.
+//
+	{
+	return new(ELeave) CTestSecureFSSession();
+	}
+
+void CTestSecureFSserver::AddSession()
+//
+// A new session is being created
+// Cancel the shutdown timer if it was running
+//
+	{
+	++iSessionCount;
+	iShutdown.Cancel();
+	}
+
+void CTestSecureFSserver::DropSession()
+//
+// A session is being destroyed
+// Start the shutdown timer if it is the last session.
+//
+	{
+	if (--iSessionCount==0)
+		iShutdown.Start();
+	}
+
+void CTestSecureFSserver::Send(const TDesC& aMessage)
+//
+// Pass on the signal to all clients
+//
+	{
+	iSessionIter.SetToFirst();
+	CSession2* s;
+	while ((s=iSessionIter++)!=0)
+		static_cast<CTestSecureFSSession*>(s)->Send(aMessage);
+	}
+
+void PanicClient(const RMessage2& aMessage,TTestPanic aPanic)
+//
+// RMessage::Panic() also completes the message. This is:
+// (a) important for efficient cleanup within the kernel
+// (b) a problem if the message is completed a second time
+//
+	{
+	_LIT(KPanic,"TestServer");
+ 	aMessage.Panic(KPanic,aPanic);
+	}
+
+
+
+/**
+Perform all 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(KTestServerName));
+	// create and install the active scheduler we need
+	CActiveScheduler* s=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(s);
+	CActiveScheduler::Install(s);
+	CTestSecureFSserver::NewLC(); // create the server (leave it on the cleanup stack)
+	RProcess::Rendezvous(KErrNone);
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy(2); 	// Cleanup the server and scheduler
+	}
+
+
+
+
+TInt E32Main()
+//
+// Server process entry-point
+//
+	{
+	__UHEAP_MARK;
+	//
+	RDebug::Print(_L("Server::E32Main Version 0.0.0"));
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+	TInt r=KErrNoMemory;
+	if (cleanup)
+		{
+		TRAP(r,RunServerL());
+		delete cleanup;
+		}
+	//
+	__UHEAP_MARKEND;
+	return r;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Src/SmokeTestTimeOutTimer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,59 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// SmokeTestTimeOutTimer.h
+// This contains CTestTimeOutTimer
+// 
+//
+
+#include "SmokeTestTimeOutTimer.h"
+
+//
+// Construction/Destruction
+//
+
+EXPORT_C CTestTimeOutTimer::~CTestTimeOutTimer()
+	{
+	}
+
+EXPORT_C CTestTimeOutTimer* CTestTimeOutTimer::NewL(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority)
+	{
+	CTestTimeOutTimer*	self=NewLC(aTestTimerCallback, aPriority);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C CTestTimeOutTimer* CTestTimeOutTimer::NewLC(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority)
+	{
+	CTestTimeOutTimer*	self=new(ELeave) CTestTimeOutTimer(aTestTimerCallback, aPriority);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestTimeOutTimer::CTestTimeOutTimer(MTestTimeOutTimerCallback& aTestTimerCallback, TInt aPriority)
+:	CTimer(aPriority)
+,	iTestTimerCallback(aTestTimerCallback)
+	{
+	}
+
+void CTestTimeOutTimer::ConstructL()
+	{
+	CTimer::ConstructL();
+	CActiveScheduler::Add(this);
+	}
+
+void CTestTimeOutTimer::RunL()
+	{
+	iTestTimerCallback.TimerCompleted();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/Src/TestStepSmokeTest.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,345 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestStepSmokeTest
+// 
+//
+
+//user include
+#include "TestStepSmokeTest.h"
+
+//Epoc include
+#include <testconfigfileparser.h>
+#include <f32file.h>
+#include <e32std.h>
+
+/*@{*/
+_LIT(KExpectedCapCheckResult,	"ExpectedCapCheckResult");
+_LIT(KConfigFile,				"C:\\plattest\\platsec\\plattest_capabilities.config");
+_LIT(KDefault,					"default");
+_LIT(KCapTest,					"CapabilityTest");
+_LIT(KNo,						"No");
+
+_LIT(KLogging,					"logging");
+_LIT(KLoggingMin,				"min");
+_LIT(KLoggingNormal,			"normal");
+_LIT(KLoggingMax,				"max");
+
+_LIT(KRepetition,				"repetition");
+/*@}*/
+
+//
+// Construction/Destruction
+//
+
+/**
+ Constructor
+*/
+EXPORT_C CTestStepSmokeTest::CTestStepSmokeTest()
+:	CTestStep()
+,	iLoggingDetail(ETestLoggingDetail_Normal)
+,	iRepetition(1)
+	{
+	}
+
+/**
+ Destructor
+*/
+EXPORT_C CTestStepSmokeTest::~CTestStepSmokeTest()
+	{
+	}
+
+	
+/**
+ The overriden implementation of CTestStep::doTestStepPreambleL()
+ @return TVerdict- result of the test step
+ @leave - system wide error codes
+*/
+EXPORT_C TVerdict CTestStepSmokeTest::doTestStepPreambleL()
+	{
+	TVerdict ret = CTestStep::doTestStepPreambleL();
+
+	//	Get logging
+	TPtrC	logging;
+	if ( GetStringFromConfig(ConfigSection(), KLogging, logging) )
+		{
+		INFO_PRINTF2(_L("Logging value %S"), &logging);
+		if ( logging.Compare(KLoggingMin) == 0 )
+			{
+			iLoggingDetail=ETestLoggingDetail_Min;
+			}
+		else if ( logging.Compare(KLoggingNormal) == 0 )
+			{
+			iLoggingDetail=ETestLoggingDetail_Normal;
+			}
+		else if ( logging.Compare(KLoggingMax) == 0 )
+			{
+			iLoggingDetail=ETestLoggingDetail_Max;
+			}
+		else
+			{
+			ERR_PRINTF1(_L("Illegal logging value, use min, normal or max."));
+			ret=EFail;
+			}
+		}
+
+	//	Get repetition count of test
+	GetIntFromConfig(ConfigSection(), KRepetition, iRepetition);
+	INFO_PRINTF2(_L("Repetition %d"), iRepetition);
+
+	return ret;
+	}
+
+/**
+ The overriden implementation of CTestStep::doTestStepPostambleL()
+ It implements the functionality of capability checking if
+ _PLATTEST_CAPTEST_ is ON.
+ @return TVerdict- result of the test step
+ @leave - system wide error codes
+*/
+
+EXPORT_C TVerdict CTestStepSmokeTest::doTestStepPostambleL()
+	{
+
+	//Read whether to do capability testing..
+	TPtrC captest(KNo);
+	GetStringFromConfig(KDefault, KCapTest, captest);
+	if( captest.Compare(_L("YES")) == 0)
+		{
+		INFO_PRINTF1(_L("---Capability Testing---"));
+		//Gets the capabilities config file
+		TBuf<KMaxTestExecuteCommandLength> scriptFile;
+		scriptFile.Copy(KConfigFile);
+		INFO_PRINTF2(_L("The config file %S"), &scriptFile);
+	
+		TBuf8<KMaxTestExecuteCommandLength> scriptSection;
+		scriptSection.Copy(_L("Capabilities"));
+			
+		TPtrC serverName = GetServerName();
+		INFO_PRINTF2(_L("The server name is  %S"), &serverName);
+		HBufC8 *scriptItem = HBufC8::NewLC(serverName.Length());
+		scriptItem->Des().Copy(serverName);
+		 
+		//Get the file server session object
+		RFs		rFs;
+		TInt	err=rFs.Connect();
+		if(err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Failed to connect with File server"));
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			CleanupClosePushL(rFs);
+			//Get the config file
+			CTestConfig* configFile = CTestConfig::NewLC(rFs, KNullDesC, scriptFile);
+			if( configFile == NULL)
+				{
+				WARN_PRINTF1(_L("NO Config file found -- Plattest_capabilites.config"));
+				}
+			else
+				{
+				//Get the item value from config file
+				TBuf8<KMaxTestExecuteCommandLength> itemValue;
+				itemValue = configFile->Section(scriptSection)->Item(scriptItem->Des())->Value();
+				TLex8 capabilityParser(itemValue);
+				TBool capCheckResult= ETrue;
+				
+				while(!capabilityParser.Eos())
+					{
+					//Parse the capabilities
+					TPtrC8 capability(capabilityParser.NextToken());
+								
+					HBufC* capabilityRead = HBufC::NewLC(capability.Length());
+					capabilityRead->Des().Copy(capability);
+					INFO_PRINTF2(_L("Capability Read is %S"), capabilityRead);
+					
+					//Get the capability value
+					TCapability capabilityValue;
+					TPtrC ptrCapabilty(capabilityRead->Des());
+					TInt err = GetCapability(ptrCapabilty, capabilityValue);
+					if( err != KErrNone)
+						{
+						WARN_PRINTF1(_L("The capability is not found"));
+						}
+					else
+						{
+						//Check if the current process posses the required capability
+						if( !RProcess().HasCapability(capabilityValue) )
+							{
+							INFO_PRINTF2(_L("The capability %S is not possesed."), capabilityRead);
+							capCheckResult=EFalse;
+							}
+						else
+							{
+							INFO_PRINTF2(_L("The capability %S is possesed."), capabilityRead);
+							}
+						}
+					CleanupStack::PopAndDestroy(capabilityRead);
+					}
+					
+				//read the expected capability check result
+				TBool expectedCapCheckResult = ETrue;
+				GetBoolFromConfig(ConfigSection(), KExpectedCapCheckResult, expectedCapCheckResult);
+				INFO_PRINTF2(_L("The expected cap check result is %D"), expectedCapCheckResult);
+				INFO_PRINTF2(_L("The cap check result is %D"), capCheckResult);
+
+				if(expectedCapCheckResult == capCheckResult)
+					{
+					SetTestStepResult(EPass);
+					}
+				else
+					{
+					SetTestStepResult(EFail);
+					}
+				}
+			CleanupStack::PopAndDestroy(2, &rFs);
+			}
+		CleanupStack::PopAndDestroy(scriptItem);
+		if(TestStepError() == KErrPermissionDenied)
+			{
+			INFO_PRINTF1(_L(" The failure is due to Platform Security"));
+			}
+		}
+
+	TVerdict ret = CTestStep::doTestStepPostambleL();
+	return ret;
+	}
+
+/**
+ Get the capability id (enum value) for the capability name 
+ given as string.
+ @param aCapability - Capability name 
+ @param aCapabilityValue - value for the capability name
+ @return TInt - error codes
+ @leave - None
+*/
+EXPORT_C TInt CTestStepSmokeTest::GetCapability(TPtrC aCapability, TCapability& aCapabilityValue)
+	{
+	INFO_PRINTF2(_L("The capability get is %S"), &aCapability);
+	TInt	ret=KErrNone;
+
+	TBuf<KMaxTestExecuteCommandLength>	capCaseValue(aCapability);
+	capCaseValue.LowerCase();
+
+	if(!capCaseValue.Compare(_L("tcb" )))
+		{
+		aCapabilityValue=ECapabilityTCB;
+		}
+	else if(!capCaseValue.Compare(_L("commdd" )))
+		{
+		aCapabilityValue=ECapabilityCommDD;
+		}
+	else if(!capCaseValue.Compare(_L("powermgmt" )))
+		{
+		aCapabilityValue=ECapabilityPowerMgmt;
+		}
+	else if(!capCaseValue.Compare(_L("multimediadd" )))
+		{
+		aCapabilityValue=ECapabilityMultimediaDD;
+		}
+	else if(!capCaseValue.Compare(_L("readdevicedata" )))
+		{
+		aCapabilityValue=ECapabilityReadDeviceData;
+		}
+	else if(!capCaseValue.Compare(_L("writedevicedata" )))
+		{
+		aCapabilityValue=ECapabilityWriteDeviceData;
+		}
+	else if(!capCaseValue.Compare(_L("drm" )))
+		{
+		aCapabilityValue=ECapabilityDRM;
+		}
+	else if(!capCaseValue.Compare(_L("trustedui" )))
+		{
+		aCapabilityValue=ECapabilityTrustedUI;
+		}
+	else if(!capCaseValue.Compare(_L("protserv" )))
+		{
+		aCapabilityValue=ECapabilityProtServ;
+		}
+	else if(!capCaseValue.Compare(_L("diskadmin" )))
+		{
+		aCapabilityValue=ECapabilityDiskAdmin;
+		}
+	else if(!capCaseValue.Compare(_L("networkcontrol" )))
+		{
+		aCapabilityValue=ECapabilityNetworkControl;
+		}
+	else if(!capCaseValue.Compare(_L("allfiles" )))
+		{
+		aCapabilityValue=ECapabilityAllFiles;
+		}
+	else if(!capCaseValue.Compare(_L("swevent" )))
+		{
+		aCapabilityValue=ECapabilitySwEvent;
+		}
+	else if(!capCaseValue.Compare(_L("networkservices" )))
+		{
+		aCapabilityValue=ECapabilityNetworkServices;
+		}
+	else if(!capCaseValue.Compare(_L("localservices" )))
+		{
+		aCapabilityValue=ECapabilityLocalServices;
+		}
+	else if(!capCaseValue.Compare(_L("readuserdata" )))
+		{
+		aCapabilityValue=ECapabilityReadUserData;
+		}
+	else if(!capCaseValue.Compare(_L("writeuserdata")))
+		{
+		aCapabilityValue=ECapabilityWriteUserData;
+		}
+	else if(!capCaseValue.Compare(_L("location")))
+		{
+		aCapabilityValue=ECapabilityLocation;
+		}
+	else if(!capCaseValue.Compare(_L("none")))
+		{
+		aCapabilityValue=ECapability_None;
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Unrecognised capability %S, will be rejected"), &capCaseValue);
+		ret=KErrNotFound;
+		}
+
+	return ret;
+	}
+
+
+/**
+ Verifies the given time is nearly equal to current UTC time.
+ @param aTime - Time needs to be verified 
+ @return TBool - Returns ETrue if aTime is nearly equal to current UTC 
+ time, otherwise EFalse
+ @leave - None
+*/
+EXPORT_C TBool CTestStepSmokeTest::VerifyUTCTime(TTime aTime)
+	{
+	TTime homeTime;
+	TTimeIntervalSeconds utcOffset;
+
+	homeTime.HomeTime();
+	homeTime.SecondsFrom(aTime, utcOffset);
+	INFO_PRINTF2(_L("Calculated utcOffset: %D"), utcOffset.Int());
+	if(Abs<TInt>(utcOffset.Int()) <= (User::UTCOffset().Int()+120) 
+		&& Abs<TInt>(utcOffset.Int()) >= (User::UTCOffset().Int()-120))
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/bwins/SmokeTestSecureFSClientU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+	?ChangeLocaleName@RTestSecureFSclient@@QAEHABVTDesC16@@@Z @ 1 NONAME ; int RTestSecureFSclient::ChangeLocaleName(class TDesC16 const &)
+	?CheckForFile@RTestSecureFSclient@@QAEHABVTDesC16@@@Z @ 2 NONAME ; int RTestSecureFSclient::CheckForFile(class TDesC16 const &)
+	?Connect@RTestSecureFSclient@@QAEHXZ @ 3 NONAME ; int RTestSecureFSclient::Connect(void)
+	?CopyFile@RTestSecureFSclient@@QAEHABVTDesC16@@0@Z @ 4 NONAME ; int RTestSecureFSclient::CopyFile(class TDesC16 const &, class TDesC16 const &)
+	?DeleteFileL@RTestSecureFSclient@@QAEHABVTDesC16@@@Z @ 5 NONAME ; int RTestSecureFSclient::DeleteFileL(class TDesC16 const &)
+	?KillProcessL@RTestSecureFSclient@@QAEXABVTDesC16@@@Z @ 6 NONAME ; void RTestSecureFSclient::KillProcessL(class TDesC16 const &)
+	?SetHomeTime@RTestSecureFSclient@@QAEHABVTTime@@@Z @ 7 NONAME ; int RTestSecureFSclient::SetHomeTime(class TTime const &)
+	?SetUpFbs@RTestSecureFSclient@@QAEXXZ @ 8 NONAME ; void RTestSecureFSclient::SetUpFbs(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/bwins/SmokeTest_UtilsU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,23 @@
+EXPORTS
+	??0CTestProperty@@QAE@AAVCTestStep@@@Z @ 1 NONAME ; CTestProperty::CTestProperty(class CTestStep &)
+	??0CTestStepSmokeTest@@IAE@XZ @ 2 NONAME ; CTestStepSmokeTest::CTestStepSmokeTest(void)
+	??1CTestActive@@UAE@XZ @ 3 NONAME ; CTestActive::~CTestActive(void)
+	??1CTestProperty@@UAE@XZ @ 4 NONAME ; CTestProperty::~CTestProperty(void)
+	??1CTestStepSmokeTest@@UAE@XZ @ 5 NONAME ; CTestStepSmokeTest::~CTestStepSmokeTest(void)
+	??1CTestTimeOutTimer@@UAE@XZ @ 6 NONAME ; CTestTimeOutTimer::~CTestTimeOutTimer(void)
+	?Activate@CTestActive@@QAEXXZ @ 7 NONAME ; void CTestActive::Activate(void)
+	?GetCapability@CTestStepSmokeTest@@IAEHVTPtrC16@@AAW4TCapability@@@Z @ 8 NONAME ; int CTestStepSmokeTest::GetCapability(class TPtrC16, enum TCapability &)
+	?GetPropertyL@CTestProperty@@QAEHVTUid@@HAAH@Z @ 9 NONAME ; int CTestProperty::GetPropertyL(class TUid, int, int &)
+	?GetPropertyL@CTestProperty@@QAEHVTUid@@HAAVTDes16@@@Z @ 10 NONAME ; int CTestProperty::GetPropertyL(class TUid, int, class TDes16 &)
+	?GetPropertyL@CTestProperty@@QAEHVTUid@@HAAVTDes8@@@Z @ 11 NONAME ; int CTestProperty::GetPropertyL(class TUid, int, class TDes8 &)
+	?NewL@CTestActive@@SAPAV1@AAVMTestActiveCallback@@H@Z @ 12 NONAME ; class CTestActive * CTestActive::NewL(class MTestActiveCallback &, int)
+	?NewL@CTestTimeOutTimer@@SAPAV1@AAVMTestTimeOutTimerCallback@@H@Z @ 13 NONAME ; class CTestTimeOutTimer * CTestTimeOutTimer::NewL(class MTestTimeOutTimerCallback &, int)
+	?NewLC@CTestActive@@SAPAV1@AAVMTestActiveCallback@@H@Z @ 14 NONAME ; class CTestActive * CTestActive::NewLC(class MTestActiveCallback &, int)
+	?NewLC@CTestTimeOutTimer@@SAPAV1@AAVMTestTimeOutTimerCallback@@H@Z @ 15 NONAME ; class CTestTimeOutTimer * CTestTimeOutTimer::NewLC(class MTestTimeOutTimerCallback &, int)
+	?SetPropertyL@CTestProperty@@QAEHVTUid@@HABVTDesC16@@@Z @ 16 NONAME ; int CTestProperty::SetPropertyL(class TUid, int, class TDesC16 const &)
+	?SetPropertyL@CTestProperty@@QAEHVTUid@@HABVTDesC8@@@Z @ 17 NONAME ; int CTestProperty::SetPropertyL(class TUid, int, class TDesC8 const &)
+	?SetPropertyL@CTestProperty@@QAEHVTUid@@HH@Z @ 18 NONAME ; int CTestProperty::SetPropertyL(class TUid, int, int)
+	?VerifyUTCTime@CTestStepSmokeTest@@IAEHVTTime@@@Z @ 19 NONAME ; int CTestStepSmokeTest::VerifyUTCTime(class TTime)
+	?doTestStepPostambleL@CTestStepSmokeTest@@UAE?AW4TVerdict@@XZ @ 20 NONAME ; enum TVerdict CTestStepSmokeTest::doTestStepPostambleL(void)
+	?doTestStepPreambleL@CTestStepSmokeTest@@UAE?AW4TVerdict@@XZ @ 21 NONAME ; enum TVerdict CTestStepSmokeTest::doTestStepPreambleL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/eabi/SmokeTestSecureFSclientU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+	_ZN19RTestSecureFSclient11DeleteFileLERK7TDesC16 @ 1 NONAME
+	_ZN19RTestSecureFSclient11SetHomeTimeERK5TTime @ 2 NONAME
+	_ZN19RTestSecureFSclient12CheckForFileERK7TDesC16 @ 3 NONAME
+	_ZN19RTestSecureFSclient12KillProcessLERK7TDesC16 @ 4 NONAME
+	_ZN19RTestSecureFSclient16ChangeLocaleNameERK7TDesC16 @ 5 NONAME
+	_ZN19RTestSecureFSclient7ConnectEv @ 6 NONAME
+	_ZN19RTestSecureFSclient8CopyFileERK7TDesC16S2_ @ 7 NONAME
+	_ZN19RTestSecureFSclient8SetUpFbsEv @ 8 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/eabi/SmokeTest_UtilsU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,40 @@
+EXPORTS
+	_ZN11CTestActive4NewLER19MTestActiveCallbacki @ 1 NONAME
+	_ZN11CTestActive5NewLCER19MTestActiveCallbacki @ 2 NONAME
+	_ZN11CTestActive8ActivateEv @ 3 NONAME
+	_ZN11CTestActiveD0Ev @ 4 NONAME
+	_ZN11CTestActiveD1Ev @ 5 NONAME
+	_ZN11CTestActiveD2Ev @ 6 NONAME
+	_ZN13CTestProperty12GetPropertyLE4TUidiR5TDes8 @ 7 NONAME
+	_ZN13CTestProperty12GetPropertyLE4TUidiR6TDes16 @ 8 NONAME
+	_ZN13CTestProperty12GetPropertyLE4TUidiRi @ 9 NONAME
+	_ZN13CTestProperty12SetPropertyLE4TUidiRK6TDesC8 @ 10 NONAME
+	_ZN13CTestProperty12SetPropertyLE4TUidiRK7TDesC16 @ 11 NONAME
+	_ZN13CTestProperty12SetPropertyLE4TUidii @ 12 NONAME
+	_ZN13CTestPropertyC1ER9CTestStep @ 13 NONAME
+	_ZN13CTestPropertyC2ER9CTestStep @ 14 NONAME
+	_ZN13CTestPropertyD0Ev @ 15 NONAME
+	_ZN13CTestPropertyD1Ev @ 16 NONAME
+	_ZN13CTestPropertyD2Ev @ 17 NONAME
+	_ZN18CTestStepSmokeTest13GetCapabilityE7TPtrC16R11TCapability @ 18 NONAME
+	_ZN18CTestStepSmokeTest13VerifyUTCTimeE5TTime @ 19 NONAME
+	_ZN18CTestStepSmokeTest19doTestStepPreambleLEv @ 20 NONAME
+	_ZN18CTestStepSmokeTest20doTestStepPostambleLEv @ 21 NONAME
+	_ZN18CTestStepSmokeTestC2Ev @ 22 NONAME
+	_ZN18CTestStepSmokeTestD0Ev @ 23 NONAME
+	_ZN18CTestStepSmokeTestD1Ev @ 24 NONAME
+	_ZN18CTestStepSmokeTestD2Ev @ 25 NONAME
+	_ZN17CTestTimeOutTimer4NewLER25MTestTimeOutTimerCallbacki @ 26 NONAME
+	_ZN17CTestTimeOutTimer5NewLCER25MTestTimeOutTimerCallbacki @ 27 NONAME
+	_ZN17CTestTimeOutTimerD0Ev @ 28 NONAME
+	_ZN17CTestTimeOutTimerD1Ev @ 29 NONAME
+	_ZN17CTestTimeOutTimerD2Ev @ 30 NONAME
+	_ZTI11CTestActive @ 31 NONAME ; #<TI>#
+	_ZTI13CTestProperty @ 32 NONAME ; #<TI>#
+	_ZTI18CTestStepSmokeTest @ 33 NONAME ; #<TI>#
+	_ZTI17CTestTimeOutTimer @ 34 NONAME ; #<TI>#
+	_ZTV11CTestActive @ 35 NONAME ; #<VT>#
+	_ZTV13CTestProperty @ 36 NONAME ; #<VT>#
+	_ZTV18CTestStepSmokeTest @ 37 NONAME ; #<VT>#
+	_ZTV17CTestTimeOutTimer @ 38 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/group/SmokeTestSecureFSclient.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,31 @@
+// 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:
+// TestSecureFSclient.mmp
+// 
+//
+
+TARGET			SmokeTestSecureFSclient.dll
+TARGETTYPE		dll
+CAPABILITY		All
+
+UID			0x1000008D  0x101FF347
+VENDORID 		0x70000001
+
+USERINCLUDE		..\Inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH		..\src
+SOURCE			SmokeTestSecureFSclient.cpp
+
+LIBRARY			euser.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/group/SmokeTestSecureFSserver.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,37 @@
+// 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:
+// TestSecureFSserver.mmp
+// 
+//
+
+
+UID			0x1000008D 0x101FF346
+VENDORID 0x70000001
+
+TARGET			SmokeTestSecureFSserver.exe
+TARGETTYPE		EXE
+CAPABILITY		ALL
+
+USERINCLUDE		..\Inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH		..\SRC
+SOURCE			SmokeTestSecureFSserver.cpp
+
+SOURCEPATH .
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/group/SmokeTest_Utils.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,49 @@
+// 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"
+// which accompanies 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
+// 
+//
+
+#include "..\..\Group\Configuration.cfg"
+
+TARGET			SmokeTest_Utils.dll
+TARGETTYPE		dll
+UID           	0x1000008D 0x101FF341
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		All -TCB
+
+SOURCEPATH		..\Src
+
+SOURCE			SmokeTestTimeOutTimer.cpp
+SOURCE			SmokeTestActive.cpp
+SOURCE			TestStepSmokeTest.cpp
+SOURCE			SmokeTestProperty.cpp
+
+USERINCLUDE		..\Inc
+USERINCLUDE		..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			TestExecuteUtils.lib 
+LIBRARY			TestExecuteLogClient.lib
+LIBRARY			TestConfigFileParser.lib
+
+// We're quite heavy on the stack... 4k in WinS isn't enough...
+EPOCSTACKSIZE	0x6000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/Utils/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,31 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 test system build description file for self test suite
+// 
+//
+
+PRJ_TESTEXPORTS
+// For Emulator
+../Inc/SmokeTestTimeOutTimer.h			SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketesttimeouttimer.h)
+../Inc/SmokeTestActive.h					SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestactive.h)
+../Inc/TestStepSmokeTest.h			SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/teststepsmoketest.h)
+../Inc/SmokeTestProperty.h				SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestproperty.h)
+../Inc/SmokeTestSecureFSclientserver.h			SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestsecurefsclientserver.h)
+../Inc/SmokeTestSecureFSclient.h				SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestsecurefsclient.h)
+../Inc/SmokeTestSecureFSserver.h				SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(test/smoketestsecurefsserver.h)
+
+PRJ_TESTMMPFILES
+SmokeTestSecureFSclient.mmp
+SmokeTestSecureFSserver.mmp
+SmokeTest_Utils.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Group/Smoketest_Agenda.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,50 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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			Smoketest_Agenda_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7771
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+//CAPABILITY		WriteUserData ReadUserData
+CAPABILITY All -TCB
+
+
+SOURCEPATH		..\Src
+
+SOURCE			TestAgendaServer.cpp
+SOURCE			TestAgendaAddAppt.cpp
+SOURCE			TestAgendaBase.cpp
+SOURCE			TestAgendaCreateDB.cpp
+SOURCE			TestAgendaServerLaunchProgress.cpp
+
+USERINCLUDE		..\Inc ..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			apparc.lib
+LIBRARY			euser.lib
+LIBRARY			calinterimapi.lib
+LIBRARY			etext.lib
+LIBRARY			estor.lib
+LIBRARY			efsrv.lib
+LIBRARY			TestExecuteUtils.lib
+LIBRARY			TestExecuteLogClient.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,37 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For Agenda smoketest
+// 
+//
+
+PRJ_EXPORTS
+
+../Scripts/setup_Smoketest_Agenda.script	/epoc32/release/wins/udeb/z/smoketest/setup_smoketest_agenda.script
+../Scripts/setup_Smoketest_Agenda.script	/epoc32/release/wins/urel/z/smoketest/setup_smoketest_agenda.script
+../Scripts/setup_Smoketest_Agenda.script	/epoc32/release/winscw/udeb/z/smoketest/setup_smoketest_agenda.script
+../Scripts/setup_Smoketest_Agenda.script	/epoc32/release/winscw/urel/z/smoketest/setup_smoketest_agenda.script
+
+../Scripts/Smoketest_Agenda.script	/epoc32/release/wins/udeb/z/smoketest/smoketest_agenda.script
+../Scripts/Smoketest_Agenda.script	/epoc32/release/wins/urel/z/smoketest/smoketest_agenda.script
+../Scripts/Smoketest_Agenda.script	/epoc32/release/winscw/udeb/z/smoketest/smoketest_agenda.script
+../Scripts/Smoketest_Agenda.script	/epoc32/release/winscw/urel/z/smoketest/smoketest_agenda.script
+
+../TestData/Smoketest_Agenda.ini				/epoc32/release/wins/udeb/z/smoketest/smoketest_agenda.ini
+../TestData/Smoketest_Agenda.ini				/epoc32/release/wins/urel/z/smoketest/smoketest_agenda.ini
+../TestData/Smoketest_Agenda.ini				/epoc32/release/winscw/udeb/z/smoketest/smoketest_agenda.ini
+../TestData/Smoketest_Agenda.ini				/epoc32/release/winscw/urel/z/smoketest/smoketest_agenda.ini
+
+
+PRJ_TESTMMPFILES
+Smoketest_Agenda.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Inc/TestAgendaAddAppt.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,37 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestAgendaCreateDB.h
+// This contains CTestAgendaAddAppt
+// 
+//
+
+#ifndef TEST_AGENDA_ADD_APPT_H
+#define TEST_AGENDA_ADD_APPT_H
+
+#include "TestAgendaBase.h"
+
+class CTestAgendaAddAppt : public CTestAgendaBase
+{
+public:
+	CTestAgendaAddAppt();
+	virtual ~CTestAgendaAddAppt();
+
+public:
+	virtual enum TVerdict doTestStepL( void );
+
+private:
+	void	AddEntriesL( void );
+};
+
+#endif /* TEST_AGENDA_ADD_APPT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Inc/TestAgendaBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,91 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaBase which is the base class for all
+// the Psd Agx suite test steps
+// 
+//
+
+#ifndef TEST_AGENDA_BASE_H
+#define TEST_AGENDA_BASE_H
+
+#include <test/testexecutestepbase.h>
+#include <calentryview.h>
+#include <gdi.h>
+
+
+
+//forward declarations
+class CCalSession;
+
+#define KMaxDateStringLength	30
+#define KMaxTimeStringLength	30
+
+#define KMaxDateStringLength	30
+#define KMaxTimeStringLength	30
+
+class CTestAgendaPicture :public MPictureFactory
+/**
+*  Picture class for the agenda model
+*/
+{
+/**************************************************************
+* An object of this class is used for setting the picture factory
+* of an Agenda model, although our code does not use any of the
+* functionality provided by this class, it is created with empty
+* implementation and set to satisfy the compiler as it uses
+* an assert macro to check if this object is set before saving
+* the agenda model entries into a file
+*************************************************************/
+
+public:
+	CTestAgendaPicture();
+	virtual ~CTestAgendaPicture();
+	virtual void NewPictureL(TPictureHeader& aHeader,const CStreamStore& aDeferredPictureStore)const;
+};
+
+
+class CTestAgendaBase : public CTestStep
+{
+public:
+	CTestAgendaBase();
+	~CTestAgendaBase();
+
+	virtual enum TVerdict	doTestStepPreambleL();
+	virtual enum TVerdict	doTestStepPostambleL();
+
+	CCalSession& CTestAgendaBase::CalSession();
+	void SetCalEntryView(CCalEntryView* calEntryViewPtr);
+
+protected:
+	void	CreateDatabaseL();
+	void	OpenDatabaseL();
+	void	CleanupDatabase();
+
+private:
+	CActiveScheduler*	iSchedular;
+	TBool				iEnteredBlocked;
+	TBool				iExitedBlocked;
+
+protected:
+    RFs					iFs;
+	TBool				iSessionConnected;
+	CCalEntryView*      iCalEntryViewBase;
+	/**
+	To store the models entries
+	*/
+	CFileStore*			iStore;
+	CCalSession*        iCalSession;
+};
+
+#endif /* TEST_AGENDA_BASE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Inc/TestAgendaCreateDB.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,34 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaCreateDB
+// 
+//
+
+#ifndef TEST_AGENDA_CREATE_DB_H
+#define TEST_AGENDA_CREATE_DB_H
+
+#include "TestAgendaBase.h"
+
+class CTestAgendaCreateDB : public CTestAgendaBase
+{
+public:
+	CTestAgendaCreateDB();
+	virtual ~CTestAgendaCreateDB();
+
+public:
+	virtual enum TVerdict doTestStepL( void );
+
+};
+
+#endif /* TEST_AGENDA_CREATE_DB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Inc/TestAgendaServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaServer
+// 
+//
+
+#ifndef TEST_AGENDA_SERVER_H
+#define TEST_AGENDA_SERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+class  CTestAgendaServer : public CTestServer
+{
+public:
+	static CTestAgendaServer*	NewL();
+	virtual CTestStep*			CreateTestStep(const TDesC& aStepName);
+
+private:
+	void	ConstructL();
+};
+
+#endif /* TEST_AGENDA_SERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Inc/TestAgendaServerLaunchProgress.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,75 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaServerLaunchProgress
+// 
+//
+
+#ifndef TEST_AGENDA_SERVER_LAUNCH_PROGRESS_H
+#define TEST_AGENDA_SERVER_LAUNCH_PROGRESS_H
+
+#include "TestAgendabase.h"
+#include <e32base.h>
+#include <calprogresscallback.h>
+
+
+//forward declaration
+//class CTestAgendaBase;
+class CCalEntryView;
+
+
+class CTestAgendaServerLaunchProgress : public CActive, private MCalProgressCallBack
+/**
+* This class provides an implementationfor the pure virtual functions
+* declared in MAgnProgressCallBack. The framework  makes calls to the
+* functions indidcating the status of the operation.
+*/
+{
+public:
+	static CTestAgendaServerLaunchProgress* NewL(CTestAgendaBase* aAgendaBase);
+	virtual ~CTestAgendaServerLaunchProgress();
+	void	Start();
+
+	//from CActive
+	virtual void	RunL();
+	virtual void	DoCancel();
+
+private:
+	CTestAgendaServerLaunchProgress(CTestAgendaBase* aAgendaBase);
+	void	ConstructL();
+
+	//from MAgnProgressCallBack
+	virtual void	Completed(TInt aError = KErrNone);
+	virtual void	Progress(TInt aPercentageCompleted);
+	virtual TBool NotifyProgress();
+
+private:
+	/**
+	pointer to the CTestAgendaBase object.
+	*/
+	CTestAgendaBase*			iAgendaBase;
+    CCalEntryView*              iCalEntryView;
+
+	/**
+	file in which the entries are present
+	*/
+	TPtrC						iFileName;
+
+	/**
+	file server session
+	*/
+	RFs							iFs;
+
+};
+
+#endif TEST_AGENDA_SERVER_LAUNCH_PROGRESS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Scripts/Smoketest_Agenda.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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 "Eclipse Public License v1.0"
+// which accompanies 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 Agenda smoketest
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\agenda.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Agenda_Server
+//
+START_TESTCASE 8981
+RUN_TEST_STEP 100	Smoketest_Agenda_Server	CreateDB	c:\Smoketest\Smoketest_Agenda.ini	18920_CreateDB
+END_TESTCASE 8981
+START_TESTCASE 8979
+RUN_TEST_STEP 1000	Smoketest_Agenda_Server	AddAppt		c:\Smoketest\Smoketest_Agenda.ini	24560_AddAppts
+END_TESTCASE 8979
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Scripts/setup_Smoketest_Agenda.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+//
+
+RUN_UTILS MkDir c:\Smoketest\
+
+RUN_UTILS CopyFile z:\smoketest\smoketest_agenda.ini	c:\smoketest\smoketest_agenda.ini
+RUN_UTILS MakeReadWrite c:\smoketest\smoketest_agenda.ini
+
+// RUN_SCRIPT Smoketest_Agenda.script
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Src/TestAgendaAddAppt.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,191 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaAddAppt
+// 
+//
+
+#include <test/testexecuteclient.h>
+#include <calentry.h>
+#include <calalarm.h> 
+
+
+#include "TestAgendaAddAppt.h"
+
+_LIT(KCount,		"count");
+_LIT(KYear,			"year%d");
+_LIT(KMonth,		"month%d");
+_LIT(KDay,			"day%d");
+_LIT(KHour,			"hour%d");
+_LIT(KMinute,		"min%d");
+_LIT(KDuration,		"duration%d");
+_LIT(KMessage,		"message%d");
+_LIT(KAlarm,		"alarm%d");
+_LIT(KAlarmSound,	"alarmsound%d");
+
+// constructor
+CTestAgendaAddAppt::CTestAgendaAddAppt()
+	{
+	SetTestStepName(_L("AddAppt"));
+	}
+
+// destructor
+CTestAgendaAddAppt::~CTestAgendaAddAppt()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestAgendaAddAppt::doTestStepL( void )
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("TEST-> ADDING APPOINTMENT ENTRIES"));
+
+	OpenDatabaseL();
+	if ( TestStepResult() == EPass )
+		{
+		TRAPD(r, AddEntriesL());
+		if (r!=KErrNone)
+			SetTestStepResult(EFail);
+		}
+	CleanupDatabase();
+
+	// test steps return a result
+	return TestStepResult();
+	}
+	
+// Destroy the RPointerArray
+void DestroyRPointerArray(TAny* aPtr)
+        {
+        RPointerArray<CCalEntry>* self = static_cast<RPointerArray<CCalEntry>*> (aPtr);
+        self->ResetAndDestroy();
+        }
+
+
+void CTestAgendaAddAppt::AddEntriesL( void )
+	{
+	TInt	count=1;
+	if ( !GetIntFromConfig(ConfigSection(), KCount, count) )
+		count=1;
+
+	TBuf<KMaxTestExecuteCommandLength>	tempStore;
+	TInt	year;
+	TInt	month;
+	TInt	day;
+	TInt	hour;
+	TInt	minute;
+	TInt	duration;
+	TInt	alarm;
+	TPtrC	ptrAlarmSound;
+	TPtrC	ptrMessage;
+	TBuf<KMaxDateStringLength> dateString;
+	_LIT(KDateString,"%*E%*D%X%*N%*Y %1 %2 '%3");
+
+	RPointerArray<CCalEntry> array;
+    CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &array));
+
+	for (TInt entry=0; entry<count && TestStepResult() == EPass; )
+		{
+		TTime	today;
+		today.HomeTime();
+
+		tempStore.Format(KYear(), ++entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, year) )
+			year=today.DateTime().Year();
+
+		tempStore.Format(KMonth(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, month) )
+			month=today.DateTime().Month();
+
+		tempStore.Format(KDay(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, day) )
+			day=today.DateTime().Day();
+		else
+			--day;
+
+		tempStore.Format(KHour(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, hour) )
+			hour=today.DateTime().Hour();
+
+		tempStore.Format(KMinute(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, minute) )
+			minute=0;
+
+		tempStore.Format(KDuration(), entry);
+		if ( !GetIntFromConfig(ConfigSection(), tempStore, duration) )
+			duration=30;
+
+		tempStore.Format(KMessage(), entry);
+		GetStringFromConfig(ConfigSection(), tempStore, ptrMessage);
+
+		TTime		startTime(TDateTime(year, TMonth(month-1+EJanuary), day, hour, minute,0,0));
+		startTime.FormatL(dateString,KDateString);
+	  	INFO_PRINTF2(_L("Start date is  %S"), &dateString);
+
+		TTime		endTime = startTime + TTimeIntervalMinutes(duration);
+		endTime.FormatL(dateString,KDateString);
+	  	INFO_PRINTF2(_L("End date is  %S"), &dateString);
+
+		
+		HBufC8* uid = HBufC8::NewLC(255);
+		TPtr8 uidP = uid->Des();
+		uidP.Append(count);
+		
+		CCalEntry* calEntry = CCalEntry::NewL(CCalEntry::EAppt, uid, CCalEntry::EMethodNone, 0);
+		
+		CleanupStack::Pop(); //uid
+		CleanupStack::PushL(calEntry);
+		
+		TCalTime calStartTime, calEndTime;
+		
+		calStartTime.SetTimeLocalL(startTime);
+		calEndTime.SetTimeLocalL(endTime);
+		
+		calEntry->SetStartAndEndTimeL(calStartTime, calEndTime);
+		
+		tempStore.Format(KAlarm(), entry);
+		if ( GetIntFromConfig(ConfigSection(), tempStore, alarm) )
+			{
+			TTimeIntervalMinutes	currentTime((hour*60) + minute);
+			TTimeIntervalMinutes	alarmTime(currentTime.Int());
+			
+			CCalAlarm* calAlarm = CCalAlarm::NewL();
+			CleanupStack::PushL(calAlarm);
+			
+			calAlarm->SetTimeOffset(alarmTime);
+			
+			tempStore.Format(KAlarmSound(), entry);
+			if ( GetStringFromConfig(ConfigSection(), tempStore, ptrAlarmSound) )
+				calAlarm->SetAlarmSoundNameL(ptrAlarmSound);
+			else
+				calAlarm->SetAlarmSoundNameL(_L("Bells"));
+			
+			calEntry->SetAlarmL(calAlarm);
+			CleanupStack::PopAndDestroy(); //calAlarm
+			}
+		//Store in the array
+		array.AppendL(calEntry);
+		
+		CleanupStack::Pop(); //calEntry
+		}
+		INFO_PRINTF1(_L("About to store appointments now"));
+		TInt success(0);
+		TRAPD(storeError, iCalEntryViewBase->StoreL(array, success));
+		INFO_PRINTF2(_L("Store result is %d"), storeError);
+		if (success != count && storeError == KErrNone)
+		    {
+			SetTestStepResult(EFail);
+		    } 
+		
+		CleanupStack::PopAndDestroy(&array);
+		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Src/TestAgendaBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,225 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaCase which is the base class for all the Agenda TestCase DLL
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <test/testexecutelog.h>
+#include "TestAgendabase.h"
+#include "TestAgendaServerLaunchProgress.h"
+
+#include <calsession.h>
+
+
+
+_LIT(KDef,		"default");
+_LIT(KFileName,		"filenameSecure");
+
+void CTestAgendaPicture::NewPictureL(TPictureHeader& /*aHeader*/,const CStreamStore& /*aDeferredPictureStore*/)const
+/**
+Creates a new Picture object for use by agenda model, currently the implementation is empty as our code
+does not use any the functionality.
+*/
+	{
+	//empty implementation
+	}
+
+CTestAgendaPicture::CTestAgendaPicture()
+/**
+constructor, currently the implementation is empty
+*/
+	{
+	//empty implementation
+	}
+
+CTestAgendaPicture::~CTestAgendaPicture()
+/**
+destructor, currently the implementation is empty
+*/
+	{
+	//empty implementation
+	}
+
+CTestAgendaBase::CTestAgendaBase()
+: CTestStep()
+, iSchedular(NULL)
+, iEnteredBlocked(EFalse)
+, iExitedBlocked(EFalse)
+, iSessionConnected(EFalse)
+, iCalEntryViewBase(NULL)
+, iStore(NULL)
+, iCalSession(NULL)
+	{
+	}
+
+// destructor
+CTestAgendaBase::~CTestAgendaBase()
+	{
+	delete iSchedular;
+	iSchedular=NULL;
+	
+	}
+
+enum TVerdict CTestAgendaBase::doTestStepPreambleL()
+	{
+	TVerdict	ret = CTestStep::doTestStepPreambleL();
+	
+	INFO_PRINTF1(_L("doTestStepPreambleL"));
+	iSchedular=new (ELeave) CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+	
+	iCalSession = CCalSession::NewL();
+
+	return ret;
+	}
+
+enum TVerdict CTestAgendaBase::doTestStepPostambleL()
+	{
+	
+	delete iCalEntryViewBase;
+	iCalEntryViewBase=NULL;
+	
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+	
+
+	return CTestStep::doTestStepPostambleL();
+	}
+
+// Create a new database
+void CTestAgendaBase::CreateDatabaseL( void )
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if ( !returnValue )
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+	
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		}
+	else
+		{
+		User::Leave(KErrNotFound);
+		}
+
+	//	Connect file server
+	User::LeaveIfError(iFs.Connect());
+	iSessionConnected=ETrue;
+	
+	TInt r;
+	if (iCalSession)
+	    {
+		TRAP(r, iCalSession->CreateCalFileL(ptrFileName));
+	    }
+	    
+	if (r == KErrAlreadyExists)
+	    {
+		TRAP_IGNORE(iCalSession->DeleteCalFileL(ptrFileName));
+		TRAP(r, iCalSession->CreateCalFileL(ptrFileName));
+	    }
+
+        
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		ERR_PRINTF2(_L("Creating Agenda file failed with error %d"), r);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CTestAgendaBase::OpenDatabaseL( void )
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if ( !returnValue )
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+	
+
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		}
+	else
+		{
+		User::Leave(KErrNotFound);
+		}
+
+	//	Connect file server
+	User::LeaveIfError(iFs.Connect());
+	iSessionConnected=ETrue;
+
+    
+	if (iCalSession)
+	    {
+		iCalSession->OpenL(ptrFileName);
+	    }	
+    
+	//open the database by creating an object of CTestAgendaServerLaunchProgress
+	CTestAgendaServerLaunchProgress*	progress = CTestAgendaServerLaunchProgress::NewL(this);
+	CleanupStack::PushL(progress);
+
+	//kick start the launching process
+	progress->Start();
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy(progress);
+
+	}
+
+void CTestAgendaBase::CleanupDatabase( void )
+	{
+	if (iCalEntryViewBase)
+	    {
+		delete iCalEntryViewBase;
+		iCalEntryViewBase = NULL;
+	    }
+
+/*	if (iCalSession)
+		{
+		delete iCalSession;
+		iCalSession=NULL;
+		}*/
+
+
+	if (iSessionConnected)
+		{
+		iFs.Close();
+		iSessionConnected=EFalse;
+		}
+	}
+	
+void CTestAgendaBase::SetCalEntryView(CCalEntryView* calEntryViewPtr)
+    {
+	iCalEntryViewBase = calEntryViewPtr;
+    }
+
+CCalSession& CTestAgendaBase::CalSession()
+    {
+	if (iCalSession)
+	    {
+		return *iCalSession;
+	    }
+	else
+	    {
+	    iCalSession = CCalSession::NewL();
+	    
+	    return *iCalSession;	
+	    }
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Src/TestAgendaCreateDB.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,43 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaCreateDB
+// 
+//
+
+#include <test/testexecutelog.h>
+
+#include "TestAgendaCreateDB.h"
+
+// constructor
+CTestAgendaCreateDB::CTestAgendaCreateDB()
+	{
+	SetTestStepName(_L("CreateDB"));
+	}
+
+// destructor
+CTestAgendaCreateDB::~CTestAgendaCreateDB()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestAgendaCreateDB::doTestStepL( void )
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("TEST-> CREATING OUR AGENDA DATABASE"));
+
+	CreateDatabaseL();
+
+	// test steps return a result
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Src/TestAgendaServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,107 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 main DLL entry point for the Smoketest_Agenda.dll
+// 
+//
+
+
+// EPOC includes
+#include <e32base.h>
+
+#include "TestAgendaServer.h"
+#include "TestAgendaAddAppt.h"
+#include "TestAgendaCreateDB.h"
+
+
+_LIT(KServerName,"Smoketest_Agenda_Server");
+
+CTestAgendaServer* CTestAgendaServer::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.
+ */
+	{
+	CTestAgendaServer*	server = new (ELeave) CTestAgendaServer();
+	CleanupStack::PushL(server);
+	// CServer base class call
+	server->StartL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler*	sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CTestAgendaServer*	server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTestAgendaServer::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* CTestAgendaServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep*	testStep = NULL;
+
+	if(aStepName == _L("AddAppt"))
+		testStep = new CTestAgendaAddAppt();
+	else if(aStepName == _L("CreateDB"))
+		testStep = new CTestAgendaCreateDB(); 
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Src/TestAgendaServerLaunchProgress.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,120 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestAgendaServerLaunchProgress
+// 
+//
+
+#include "TestAgendaServerLaunchProgress.h"
+#include <calentryview.h>
+
+CTestAgendaServerLaunchProgress* CTestAgendaServerLaunchProgress::NewL(CTestAgendaBase* aAgendaBase)
+/**
+ * @return - Instance of the agenda progress callback
+ */
+	{
+	CTestAgendaServerLaunchProgress*	progress = new (ELeave) CTestAgendaServerLaunchProgress(aAgendaBase);
+	CleanupStack::PushL(progress);
+	progress->ConstructL();
+	CleanupStack::Pop(progress);
+	return progress;
+	}
+
+CTestAgendaServerLaunchProgress::CTestAgendaServerLaunchProgress(CTestAgendaBase* aAgendaBase)
+:	CActive(EPriorityStandard)
+,	iAgendaBase(aAgendaBase)
+/**
+constructor
+*/
+	{
+	}
+
+void CTestAgendaServerLaunchProgress::ConstructL()
+/**
+constructor
+*/
+	{
+	//adding this active object into an active scheduler
+	CActiveScheduler::Add(this);
+	}
+
+CTestAgendaServerLaunchProgress::~CTestAgendaServerLaunchProgress()
+/**
+destructor
+*/
+	{
+ 	}
+
+void CTestAgendaServerLaunchProgress::Completed(TInt aError)
+/**
+callback function invoked after the file is completely loaded.
+@param	TInt aError
+*/
+	{
+	if(aError != KErrNone)
+		{
+		iAgendaBase ->INFO_PRINTF2(_L("Opening the agenda database file failed with error %D"),aError);
+		iAgendaBase ->SetTestStepResult(EFail);
+		}
+	else
+		{
+		iAgendaBase ->INFO_PRINTF1(_L("Opening the Agenda database succesful"));
+		}
+		CActiveScheduler::Stop();
+	}
+
+void CTestAgendaServerLaunchProgress::Progress(TInt aPercentageCompleted)
+/**
+callback function invoked to indicate the progress
+@param aPercentageCompleted percent file loaded
+*/
+	{
+	//log the progress percentage of saving the entries
+	iAgendaBase ->INFO_PRINTF2(_L("%D%% completed opening the agenda database"),aPercentageCompleted);
+	}
+
+TBool CTestAgendaServerLaunchProgress::NotifyProgress()
+    {
+	return ETrue;
+    }
+    
+void CTestAgendaServerLaunchProgress::RunL()
+/**
+RunL from CActive class, opens the agenda database file, and builds the indices
+@leave system wide error code
+*/
+	{
+	CCalEntryView* calEntryViewPtr = CCalEntryView::NewL(iAgendaBase->CalSession(), *this);
+	iAgendaBase->SetCalEntryView(calEntryViewPtr);
+	}
+
+void CTestAgendaServerLaunchProgress::DoCancel()
+/**
+DoCancel of the active object
+*/
+	{
+	iAgendaBase ->INFO_PRINTF1(_L("Inside do cancel of the active object"));
+	}
+
+
+void CTestAgendaServerLaunchProgress::Start(void)
+/**
+starts the saving process
+*/
+	{
+	TRequestStatus *threadStatus=&iStatus;
+	User::RequestComplete(threadStatus,KErrNone);
+	SetActive();
+	}
+	
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/Src/sm_agenda.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1 @@
+[Files MRU]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/TestData/Smoketest_Agenda.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,35 @@
+[default]
+filename		=c:\smoketest\Smoketest_Agenda
+filenameSecure		=c:Smoketest_Agenda
+
+[18920_CreateDB]
+
+[24560_AddAppts]
+count			=3
+
+year1			=2002
+month1			=9
+day1			=15
+hour1			=9
+min1			=0
+duration1		=15
+message1		=make a cup of tea
+
+year2			=2002
+month2			=9
+day2			=16
+hour2			=14
+min2			=0
+duration2		=60
+message2		=football
+alarm2			=15
+
+year3			=2002
+month3			=9
+day3			=15
+hour3			=12
+min3			=0
+duration3		=30
+message3		=have lunch
+alarm3			=15
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/agenda/bwins/SMOKETEST_AGENDA_SERVERU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	?NewServer@@YAHXZ @ 1 NONAME ; int __cdecl NewServer(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/autoexec.bat	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,19 @@
+@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
+REM Auto Hardware Tests Wrapper
+z:
+smoketests.bat
+REM RUNTESTS z:\dummytest.txt -p
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/build_smoketest_code.mbc	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,12 @@
+SECTION_COMMANDS
+bldmake bldfiles
+abld reallyclean
+abld test reallyclean
+abld build winscw  
+abld test build winscw
+abld build armv5  
+abld test build armv5
+
+SECTION_DIRS
+..\group
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/dummytest.txt	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,3 @@
+Dummy file. Used at the end of a test run with -p option
+(RUNTESTS z:\dummytest.txt -p)
+in order to reboot the board ready for the next rom.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/readme.txt	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,49 @@
+24/11/2008 - Temporary AutoRom solution
+========================================
+
+Code
+=====
+The code in this directory is temporary code which enables smoke testing while a fully automated replacement for testdriver is being implemented.
+
+The code changes made are:
+
+Additon of directory common\testtools\smoketest\autorom containing the files:
+build_smoketest_code.mbc, smoketests.oby, smoketests.bat, dummytest.txt, autoexec.bat, smoketest_romspec_9.5.xml, smoketest_romspec_9.5.xml and smoketest_romspec_future.xml
+
+The autorom building is invoked by changes to 
+//EPOC/master/cedar/generic/utils/Symbian_OS_v9.5.xml
+//EPOC/master/cedar/generic/utils/Symbian_OS_v9.6.xml
+//EPOC/master/cedar/generic/utils/Symbian_OS_vFuture.xml
+
+( <!--Build Smoke test auto roms (temp) -->
+<Execute Component="Build code for auto roms (Temp)" Cwd="%BuildDir%\src\common\testtools\smoketest\autorom\" CommandLine="metabld build_smoketest_code.mbc > %LogsDir%\smoketest_autorom_build.log"/>
+<Execute Component="Build Smoketest Auto Roms (Temp)" Cwd="%BuildDir%\src\cedar\generic\base\e32\rombuild\" CommandLine="perl %SourceDir%\cedar\generic\tools\romkit\utils\metarombuild.pl -romspec %SourceDir%\common\testtools\smoketest\autorom\smoketest_romspec_9.6.xml -logdir %LogsDir% -buildnum %BuildNumber%_smoketest_autorom_temp"/>)
+
+
+Location of Roms
+================
+The resulting roms can be found in :
+src\cedar\generic\base\e32\rombuild
+
+H4 Core : h4hrp_smoketest_autorom_temp.img
+H4 Rofs : h4hrp_smoketest_autorom_temp.rofs.img
+H6 Core : h6_smoketest_autorom_temp.img
+H6 Rofs : h6_smoketest_autorom_temp.rofs.img
+Naviengine :  NE1S_smoketest_autorom_temp.img
+
+
+Location of build logs
+==========================
+The log for building the smoketest code is located in:
+logs\cedar\smoketest_autorom_build.log
+
+The rom building logs can be found in :
+logs\cedar\techviewroms%buildnum%_smoketest_autorom_temp.log
+
+Executing the smoke tests
+==========================
+Put the roms onto an MMC card in the normal way. Tests will execute automatically and write results to the MMC card (E:\testresults)
+Retrieve the results from the MMC card.
+Check that all tests have passed by checking each html results file in testresults.
+Update the ESR with the results.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketest_romspec_9.5.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE RomBuildSet  [	
+  <!ELEMENT RomBuildSet (Rom+)>
+  <!ATTLIST RomBuildSet name CDATA #REQUIRED
+                        revision CDATA #REQUIRED
+  >
+    
+  <!ELEMENT Rom (InFile+,Macro*,ImageFile,XMLFile)>
+  <!ATTLIST Rom name CDATA #REQUIRED
+		TargetBoard CDATA #REQUIRED
+  >  
+  
+  <!ELEMENT InFile EMPTY>  
+  <!ATTLIST InFile name CDATA #REQUIRED>
+	
+  <!ELEMENT XMLFile EMPTY>  
+  <!ATTLIST XMLFile name CDATA #REQUIRED>
+    
+  <!ELEMENT Macro EMPTY>  
+  <!ATTLIST Macro name CDATA #REQUIRED
+		value CDATA #IMPLIED
+  >
+
+  <!ELEMENT ImageFile EMPTY>
+  <!ATTLIST ImageFile name CDATA #REQUIRED>
+]>
+
+<RomBuildSet name="RomSet" revision="1">
+
+    	<Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+      <Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+	 
+</RomBuildSet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketest_romspec_9.6.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<!DOCTYPE RomBuildSet  [	
+  <!ELEMENT RomBuildSet (Rom+)>
+  <!ATTLIST RomBuildSet name CDATA #REQUIRED
+                        revision CDATA #REQUIRED
+  >
+    
+  <!ELEMENT Rom (InFile+,Macro*,ImageFile,XMLFile)>
+  <!ATTLIST Rom name CDATA #REQUIRED
+		TargetBoard CDATA #REQUIRED
+  >  
+  
+  <!ELEMENT InFile EMPTY>  
+  <!ATTLIST InFile name CDATA #REQUIRED>
+	
+  <!ELEMENT XMLFile EMPTY>  
+  <!ATTLIST XMLFile name CDATA #REQUIRED>
+    
+  <!ELEMENT Macro EMPTY>  
+  <!ATTLIST Macro name CDATA #REQUIRED
+		value CDATA #IMPLIED
+  >
+
+  <!ELEMENT ImageFile EMPTY>
+  <!ATTLIST ImageFile name CDATA #REQUIRED>
+]>
+
+<RomBuildSet name="RomSet" revision="1">
+
+    	<Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+        <Rom name="H6 SmokeTest Temp " TargetBoard="H6">
+            <InFile name="gtc_standard_h6"/>
+		<InFile name="smoketests"/>
+            <InFile name="sysstart.iby"/>
+            <InFile name="sysstartconfig.iby"/>    
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h6_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+       <Rom name="NE1 SmokeTest Temp" TargetBoard="NE1">
+		<InFile name="smoketests"/>
+            <InFile name="gtc_standard_NE1"/>
+            <InFile name="sysstart.iby"/>
+            <InFile name="sysstartconfig.iby"/>           
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="NE1_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+      <Rom name="NE1S SmokeTest Temp" TargetBoard="NE1S">
+		<InFile name="smoketests"/>
+		<InFile name="gtc_standard_NE1S"/>
+          	<InFile name="sysstart.iby"/>
+         	<InFile name="sysstartconfig.iby"/>   
+          	<Macro name="_STARTUPMODE1" value=""/>
+          	<Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="NE1S_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+	 
+</RomBuildSet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketest_romspec_future.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<!DOCTYPE RomBuildSet  [	
+  <!ELEMENT RomBuildSet (Rom+)>
+  <!ATTLIST RomBuildSet name CDATA #REQUIRED
+                        revision CDATA #REQUIRED
+  >
+    
+  <!ELEMENT Rom (InFile+,Macro*,ImageFile,XMLFile)>
+  <!ATTLIST Rom name CDATA #REQUIRED
+		TargetBoard CDATA #REQUIRED
+  >  
+  
+  <!ELEMENT InFile EMPTY>  
+  <!ATTLIST InFile name CDATA #REQUIRED>
+	
+  <!ELEMENT XMLFile EMPTY>  
+  <!ATTLIST XMLFile name CDATA #REQUIRED>
+    
+  <!ELEMENT Macro EMPTY>  
+  <!ATTLIST Macro name CDATA #REQUIRED
+		value CDATA #IMPLIED
+  >
+
+  <!ELEMENT ImageFile EMPTY>
+  <!ATTLIST ImageFile name CDATA #REQUIRED>
+]>
+
+<RomBuildSet name="RomSet" revision="1">
+
+    	<Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+        <Rom name="H6 SmokeTest Temp " TargetBoard="H6">
+            <InFile name="gtc_standard_h6"/>
+		<InFile name="smoketests"/>
+            <InFile name="sysstart.iby"/>
+            <InFile name="sysstartconfig.iby"/>    
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h6_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+       <Rom name="NE1 SmokeTest Temp" TargetBoard="NE1">
+		<InFile name="smoketests"/>
+            <InFile name="gtc_standard_NE1"/>
+            <InFile name="sysstart.iby"/>
+            <InFile name="sysstartconfig.iby"/>           
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="NE1_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+      <Rom name="NE1S SmokeTest Temp" TargetBoard="NE1S">
+		<InFile name="smoketests"/>
+		<InFile name="gtc_standard_NE1S"/>
+          	<InFile name="sysstart.iby"/>
+         	<InFile name="sysstartconfig.iby"/>   
+          	<Macro name="_STARTUPMODE1" value=""/>
+          	<Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="NE1S_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+	 
+</RomBuildSet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketest_romspec_tb101sf.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE RomBuildSet  [	
+  <!ELEMENT RomBuildSet (Rom+)>
+  <!ATTLIST RomBuildSet name CDATA #REQUIRED
+                        revision CDATA #REQUIRED
+  >
+    
+  <!ELEMENT Rom (InFile+,Macro*,ImageFile,XMLFile)>
+  <!ATTLIST Rom name CDATA #REQUIRED
+		TargetBoard CDATA #REQUIRED
+  >  
+  
+  <!ELEMENT InFile EMPTY>  
+  <!ATTLIST InFile name CDATA #REQUIRED>
+	
+  <!ELEMENT XMLFile EMPTY>  
+  <!ATTLIST XMLFile name CDATA #REQUIRED>
+    
+  <!ELEMENT Macro EMPTY>  
+  <!ATTLIST Macro name CDATA #REQUIRED
+		value CDATA #IMPLIED
+  >
+
+  <!ELEMENT ImageFile EMPTY>
+  <!ATTLIST ImageFile name CDATA #REQUIRED>
+]>
+
+<RomBuildSet name="RomSet" revision="1">
+
+    	<Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+      <Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+	 
+</RomBuildSet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketest_romspec_tb92sf.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE RomBuildSet  [	
+  <!ELEMENT RomBuildSet (Rom+)>
+  <!ATTLIST RomBuildSet name CDATA #REQUIRED
+                        revision CDATA #REQUIRED
+  >
+    
+  <!ELEMENT Rom (InFile+,Macro*,ImageFile,XMLFile)>
+  <!ATTLIST Rom name CDATA #REQUIRED
+		TargetBoard CDATA #REQUIRED
+  >  
+  
+  <!ELEMENT InFile EMPTY>  
+  <!ATTLIST InFile name CDATA #REQUIRED>
+	
+  <!ELEMENT XMLFile EMPTY>  
+  <!ATTLIST XMLFile name CDATA #REQUIRED>
+    
+  <!ELEMENT Macro EMPTY>  
+  <!ATTLIST Macro name CDATA #REQUIRED
+		value CDATA #IMPLIED
+  >
+
+  <!ELEMENT ImageFile EMPTY>
+  <!ATTLIST ImageFile name CDATA #REQUIRED>
+]>
+
+<RomBuildSet name="RomSet" revision="1">
+
+    	<Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+      <Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+	 
+</RomBuildSet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketest_romspec_vFuture.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE RomBuildSet  [	
+  <!ELEMENT RomBuildSet (Rom+)>
+  <!ATTLIST RomBuildSet name CDATA #REQUIRED
+                        revision CDATA #REQUIRED
+  >
+    
+  <!ELEMENT Rom (InFile+,Macro*,ImageFile,XMLFile)>
+  <!ATTLIST Rom name CDATA #REQUIRED
+		TargetBoard CDATA #REQUIRED
+  >  
+  
+  <!ELEMENT InFile EMPTY>  
+  <!ATTLIST InFile name CDATA #REQUIRED>
+	
+  <!ELEMENT XMLFile EMPTY>  
+  <!ATTLIST XMLFile name CDATA #REQUIRED>
+    
+  <!ELEMENT Macro EMPTY>  
+  <!ATTLIST Macro name CDATA #REQUIRED
+		value CDATA #IMPLIED
+  >
+
+  <!ELEMENT ImageFile EMPTY>
+  <!ATTLIST ImageFile name CDATA #REQUIRED>
+]>
+
+<RomBuildSet name="RomSet" revision="1">
+
+    	<Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+      <Rom name="H4 SmokeTest Temp" TargetBoard="h4hrp">	 
+      	<InFile name="gtc_standard_h4"/>
+            <InFile name="smoketests"/>
+            <InFile name="sysstartconfig.iby"/>
+            <InFile name="sysstart.iby"/>
+            <Macro name="_STARTUPMODE1" value=""/>
+            <Macro name="_EABI" value="ARMV5"/>
+		<ImageFile name="h4hrp_smoketest_autorom_temp.img"/>
+		<XMLFile flag="-fm=" name="featuredatabase.XML"/>
+	</Rom>
+
+	 
+</RomBuildSet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketests.bat	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,57 @@
+@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
+REM Run auto smoke tests on hardware
+
+
+REM create testresults directory
+md c:\testresults
+md e:\testresults
+ 
+
+testexecute z:\smoketest\smoketest_system.script
+move c:\logs\testexecute\smoketest_system.htm e:\testresults\smoketest_system.htm
+
+testexecute z:\smoketest\setup_smoketest_agenda.script
+move c:\logs\testexecute\setup_smoketest_agenda.htm e:\testresults\setup_smoketest_agenda.htm
+
+testexecute z:\smoketest\smoketest_agenda.script
+move c:\logs\testexecute\smoketest_agenda.htm e:\testresults\smoketest_agenda.htm
+
+testexecute z:\smoketest\setup_smoketest_contacts.script
+move c:\logs\testexecute\setup_smoketest_contacts.htm e:\testresults\setup_smoketest_contacts.htm
+
+testexecute z:\smoketest\smoketest_contacts.script
+move c:\logs\testexecute\smoketest_contacts.htm e:\testresults\smoketest_contacts.htm
+
+testexecute z:\smoketest\setup_smoketest_mess.script
+move c:\logs\testexecute\setup_smoketest_mess.htm e:\testresults\setup_smoketest_mess.htm
+
+testexecute z:\smoketest\smoketest_mess.script
+move c:\logs\testexecute\smoketest_mess.htm e:\testresults\smoketest_mess.htm
+
+testexecute z:\smoketest\setup_smoketest_timew.script
+move c:\logs\testexecute\setup_smoketest_timew.htm e:\testresults\setup_smoketest_timew.htm
+
+testexecute z:\smoketest\smoketest_timew.script
+move c:\logs\testexecute\smoketest_timew.htm e:\testresults\smoketest_timew.htm
+
+testexecute z:\smoketest\smoketest_phone.script
+move c:\logs\testexecute\smoketest_phone.htm e:\testresults\smoketest_phone.htm
+
+testexecute z:\smoketest\smoketest_syncmlapp.script
+move c:\logs\testexecute\smoketest_syncmlapp.htm e:\testresults\smoketest_syncmlapp.htm
+
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/autorom/smoketests.oby	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* 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 __SMOKETESTS_IBY__
+#define __SMOKETESTS_IBY__
+
+#include "testexecute.iby"  
+
+data = \epoc32\release\winscw\udeb\z\smoketest\autoexec.bat		\autoexec.bat
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketests.bat		\smoketests.bat
+data = \epoc32\release\winscw\udeb\z\smoketest\dummytest.txt	      \dummytest.txt
+ 
+
+
+
+file=ABI_DIR\BUILD_DIR\smoketest_agenda_server.exe	sys\bin\smoketest_agenda_server.exe
+file=ABI_DIR\BUILD_DIR\smoketest_contacts_server.exe	sys\bin\smoketest_contacts_server.exe
+file=ABI_DIR\BUILD_DIR\smoketest_mess_server.exe	sys\bin\smoketest_mess_server.exe
+file=ABI_DIR\BUILD_DIR\smoketest_system.exe	      sys\bin\smoketest_system.exe
+file=ABI_DIR\BUILD_DIR\smoketest_timew_server.exe	sys\bin\smoketest_timew_server.exe
+
+//required by messaging tests
+file=ABI_DIR\BUILD_DIR\SmokeTest_Utils.dll	sys\bin\SmokeTest_Utils.dll
+file=ABI_DIR\BUILD_DIR\testconfigfileparser.dll \bin\testconfigfileparser.dll  
+
+data = \epoc32\release\winscw\udeb\z\smoketest\setup_smoketest_agenda.script \smoketest\setup_smoketest_agenda.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_agenda.script \smoketest\smoketest_agenda.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\setup_smoketest_contacts.script \smoketest\setup_smoketest_contacts.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_contacts.script \smoketest\smoketest_contacts.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_createsmsaccount.script \smoketest\smoketest_createsmsaccount.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\setup_smoketest_mess.script \smoketest\setup_smoketest_mess.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_mess.script \smoketest\smoketest_mess.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\setup_smoketest_timew.script \smoketest\setup_smoketest_timew.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_timew.script \smoketest\smoketest_timew.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_phone.script \smoketest\smoketest_phone.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_syncmlapp.script \smoketest\smoketest_syncmlapp.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_system.script \smoketest\smoketest_system.script 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_agenda.ini \smoketest\smoketest_agenda.ini 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_contacts.ini \smoketest\smoketest_contacts.ini 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_mess.ini \smoketest\smoketest_mess.ini 
+data = \epoc32\release\winscw\udeb\z\smoketest\sms\message1.txt \smoketest\sms\message1.txt 
+data = \epoc32\release\winscw\udeb\z\smoketest\smoketest_timew.ini \smoketest\smoketest_timew.ini 
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/TestData/Smoketest_Contacts.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+[default]
+filename		=c:\smoketest\smoketest_contacts.cdb
+filenameSecure		=c:smoketest_contacts.cdb
+
+[18807_CreateDB]
+
+[18927_AddEntries]
+count			=5
+
+firstname1		=Feroz
+lastname1		=Uddin
+company1		=Symbian
+job1			=Cricket fan
+workphone1		=0207
+workemail1		=feroz.uddin@symbian.com
+
+firstname2		=Louis
+lastname2		=Nayegon
+company2		=Symbian
+job2			=Lazy Git
+workphone2		=01452 812178
+workemail2		=louis.nayegon@symbian.com
+
+firstname3		=Alf
+lastname3		=Garnett
+company3		=BBC
+job3			=star
+workphone3		=0207 777
+workmobile3		=07790
+homephone3		=0208 888
+homemobile3		=07792
+fax3			=0208 999
+workemail3		=alf.garnett@bbc.co.uk
+internet3		=www.bbc.co.uk
+street3			=Marylebone Road
+town3			=London
+county3			=LondonCounty
+postcode3		=W1
+country3		=England
+notes3			=Small minded bigot
+
+firstname4		=Tom
+lastname4		=Jones
+company4		=Music
+job4			=Singer
+workemail4		=tom.jones@music.com
+
+firstname5		=Alan
+lastname5		=Shearer
+company5		=Newcastle United FC
+job5			=Footballer
+FirstNamePrn5	=Al-an
+LastNamePrn5	=Shea-rer
+CompanyNamePrn5	=New-cas-el You-Nigh-Ted
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/bwins/SMOKETEST_CONTACTS_SERVERU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	?NewServer@@YAHXZ @ 1 NONAME ; int __cdecl NewServer(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/group/Smoketest_Contacts.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,50 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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			Smoketest_Contacts_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7772
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		ReadUserData WriteUserData
+
+SOURCEPATH		..\Src
+
+SOURCE			SmoketestContactsServer.cpp
+SOURCE			TestContact.cpp
+SOURCE			TestContactsAddEntries.cpp
+SOURCE			TestContactsBase.cpp
+SOURCE			TestContactsCreateDB.cpp
+
+USERINCLUDE		..\Inc ..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			efsrv.lib
+LIBRARY			estor.lib
+LIBRARY			charconv.lib
+LIBRARY			cntview.lib
+LIBRARY			euser.lib
+LIBRARY			cntmodel.lib
+LIBRARY			TestExecuteUtils.lib
+LIBRARY			TestExecuteLogClient.lib
+
+// We're quite heavy on the stack... 4k in WinS isn't enough...
+EPOCSTACKSIZE	0x6000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,36 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// For automated contacts smoketest
+// 
+//
+
+PRJ_EXPORTS
+
+../scripts/Smoketest_Contacts.script		/epoc32/release/wins/udeb/z/smoketest/smoketest_contacts.script
+../scripts/Smoketest_Contacts.script		/epoc32/release/wins/urel/z/smoketest/smoketest_contacts.script
+../scripts/Smoketest_Contacts.script		/epoc32/release/winscw/udeb/z/smoketest/smoketest_contacts.script
+../scripts/Smoketest_Contacts.script		/epoc32/release/winscw/urel/z/smoketest/smoketest_contacts.script
+
+../scripts/setup_Smoketest_Contacts.script		/epoc32/release/wins/udeb/z/smoketest/setup_smoketest_contacts.script
+../scripts/setup_Smoketest_Contacts.script		/epoc32/release/wins/urel/z/smoketest/setup_smoketest_contacts.script
+../scripts/setup_Smoketest_Contacts.script		/epoc32/release/winscw/udeb/z/smoketest/setup_smoketest_contacts.script
+../scripts/setup_Smoketest_Contacts.script		/epoc32/release/winscw/urel/z/smoketest/setup_smoketest_contacts.script
+
+../TestData/Smoketest_Contacts.ini			/epoc32/release/wins/udeb/z/smoketest/smoketest_contacts.ini
+../TestData/Smoketest_Contacts.ini			/epoc32/release/wins/urel/z/smoketest/smoketest_contacts.ini
+../TestData/Smoketest_Contacts.ini			/epoc32/release/winscw/udeb/z/smoketest/smoketest_contacts.ini
+../TestData/Smoketest_Contacts.ini			/epoc32/release/winscw/urel/z/smoketest/smoketest_contacts.ini
+
+PRJ_TESTMMPFILES
+Smoketest_Contacts.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/inc/SmoketestContactsServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,36 @@
+/**
+* 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"
+* which accompanies 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 SmoketestContactsServer.h
+*/
+#if (!defined __SMOKETESTCONTACTS_SERVER_H__)
+#define __SMOKTETESTCONTACTS_SERVER_H__
+#include <test/testexecuteserverbase.h>
+
+class CSmoketestContactsServer : public CTestServer
+	{
+public:
+	static CSmoketestContactsServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+
+private:
+	void ConstructL();
+	};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/inc/TestContact.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,100 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContact
+// 
+//
+
+#ifndef TEST_CONTACT_H
+#define TEST_CONTACT_H
+
+#include <cntitem.h>
+
+class MTestContactInstrumentation
+{
+public:
+	virtual void			RaiseInstrumentationEventNotificationL(TInt aEventTag) = 0;
+};
+
+class CTestContact : public CBase
+	{
+public:
+	static CTestContact*	NewL(CContactItem& aSeedContact);
+	static CTestContact*	NewLC(CContactItem& aSeedContact);
+	static CTestContact*	NewL(CContactItem* aSeedContact);
+	static CTestContact*	NewLC(CContactItem* aSeedContact);
+	~CTestContact();
+
+	CContactItem&	ContactItem();
+	const TPtrC		FirstNameL();
+	const TPtrC		LastNameL();
+	const TPtrC		CompanyNameL();
+	const TPtrC		JobTitleL();
+	const TPtrC		WorkPhoneL();
+	const TPtrC		WorkMobileL();
+	const TPtrC		HomePhoneL();
+	const TPtrC		HomeMobileL();
+	const TPtrC		FaxL();
+	const TPtrC		EmailAddressL();
+	const TPtrC		InternetAddressL();
+	const TPtrC		StreetL();
+	const TPtrC		TownL();
+	const TPtrC		CountyL();
+	const TPtrC		PostCodeL();
+	const TPtrC		CountryL();
+	const TPtrC		NotesL();
+	const TPtrC		NickNameL();
+	const TPtrC		PictureL();
+
+	void	SetFirstNameL(const TDesC& aFirstName);
+	void	SetLastNameL(const TDesC& aLastName);
+	void	SetCompanyNameL(const TDesC& aCompanyName);
+	void	SetJobTitleL(const TDesC& aJobTitle);
+	void	SetWorkPhoneL(const TDesC& aWorkPhone);
+	void	SetWorkMobileL(const TDesC& aWorkMobile);
+	void	SetHomePhoneL(const TDesC& aHomePhone);
+	void	SetHomeMobileL(const TDesC& aHomeMobile);
+	void	SetFaxL(const TDesC& aFax);
+	void	SetHomeEmailAddressL(const TDesC& aEmailAddress);
+	void	SetWorkEmailAddressL(const TDesC& aEmailAddress);
+	void	SetInternetAddressL(const TDesC& aInternetAddress);
+	void	SetStreetL(const TDesC& aStreet);
+	void	SetTownL(const TDesC& aTown);
+	void	SetCountyL(const TDesC& aCounty);
+	void	SetPostCodeL(const TDesC& aPostCode);
+	void	SetCountryL(const TDesC& aCountry);
+	void	SetNotesL(const TDesC& aNotes);
+	void	SetNickNameL(const TDesC& aNickName);
+	void 	SetPictureL(const TDesC8& aPicture);
+
+private:
+	CTestContact();
+	void				ConstructL(CContactItem& aSeedContact);
+	void				ConstructL(CContactItem* aSeedContact);
+	const TPtrC			TextFieldL(TFieldType aFieldType) const;
+	const TPtrC			TextFieldL(const CContentType& aTypesToMatch) const;
+  	void 				SetTextFieldL(const CContentType& aTypesToMatch,const TDesC& aText) const;
+  	void 				SetTextFieldL(TFieldType aFieldType, const TDesC& aText);
+  	void 				SetTextFieldL(TFieldType aFieldType, const TDesC& aText, TUid aAddOnContentType);
+	CContactItemField&	FindFieldL(TFieldType aFieldType) const;
+	CContactItemField&	FindFieldL(const CContentType& aTypesToMatch) const;
+	void SetPictureFieldL(const TDesC8& aPicture) const;
+	TInt FindField(TFieldType aFieldType) const;
+  	void InsertTextFieldL(TUid aID, const TDesC& aStringOfStuff);
+
+private:
+	CContactItem*	iContactItem;
+	TBool			iDestroyOnExit;
+	};
+
+#endif /* __TEST_CONTACT_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/inc/TestContactsAddEntries.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,35 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestSuiteContacts
+// 
+//
+
+#ifndef TEST_CONTACTS_ADD_ENTRIES_H
+#define TEST_CONTACTS_ADD_ENTRIES_H
+
+#include "TestContactsBase.h"
+
+class CTestContactsAddEntries : public CTestContactsBase
+{
+public:
+	CTestContactsAddEntries();
+	virtual ~CTestContactsAddEntries();
+
+	virtual enum TVerdict doTestStepL( void );
+
+private:
+	void	AddEntriesL( void );
+};
+
+#endif TEST_CONTACTS_ADD_ENTRIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/inc/TestContactsBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,53 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsBase
+// 
+//
+
+#ifndef TEST_CONTACTS_BASE_H
+#define TEST_CONTACTS_BASE_H
+
+
+#include <cntdb.h>
+#include <test/testexecutestepbase.h>
+#include <cntitem.h>
+
+#include "TestContact.h"
+
+const TInt KMaxScriptLineLength = 200;
+
+class CTestContactsBase : public CTestStep, protected MTestContactInstrumentation
+{
+public:
+	CTestContactsBase();
+	~CTestContactsBase();
+	virtual enum TVerdict	doTestStepPreambleL();
+	virtual enum TVerdict	doTestStepPostambleL();
+
+protected:
+	void				CreateDatabase();
+	void				OpenDatabase();
+	void				CleanupDatabase();
+	void				RaiseInstrumentationEventNotificationL(TInt aEventTag);
+	CContactIdArray*	SearchEntriesL();
+
+protected:
+	CContactDatabase*			iDatabase;
+	CContactItemFieldDef*		iFieldDef;
+
+private:
+	CActiveScheduler*			iSchedular;
+};
+
+#endif /* TEST_CONTACTS_BASE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/inc/TestContactsCreateDB.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsCreateDB
+// 
+//
+
+#ifndef TEST_CONTACTS_CREATE_DB_H
+#define TEST_CONTACTS_CREATE_DB_H
+
+#include "TestContactsBase.h"
+
+class CTestContactsCreateDB : public CTestContactsBase
+{
+public:
+	CTestContactsCreateDB();
+	virtual ~CTestContactsCreateDB();
+
+	virtual enum TVerdict doTestStepL( void );
+
+};
+
+#endif /* TEST_CONTACTS_CREATE_DB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/scripts/Smoketest_Contacts.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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 "Eclipse Public License v1.0"
+// which accompanies 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 Contacts smoketest
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\contacts.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Contacts_Server
+//
+START_TESTCASE 9094
+RUN_TEST_STEP 100	Smoketest_Contacts_Server	CreateDB		c:\smoketest\Smoketest_Contacts.ini	18807_CreateDB
+END_TESTCASE 9094
+START_TESTCASE 9082
+RUN_TEST_STEP 1000	Smoketest_Contacts_Server	AddEntries		c:\smoketest\Smoketest_Contacts.ini	18927_AddEntries
+END_TESTCASE 9082
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/scripts/setup_Smoketest_Contacts.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+//
+
+RUN_UTILS MkDir c:\smoketest\
+
+RUN_UTILS CopyFile z:\smoketest\smoketest_contacts.ini	c:\smoketest\smoketest_contacts.ini
+RUN_UTILS MakeReadWrite c:\smoketest\smoketest_contacts.ini
+
+// RUN_SCRIPT Smoketest_Contacts.script
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/src/SmoketestContactsServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,108 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 SmoketestContactsServer.cpp
+*/
+
+#include "SmoketestContactsServer.h"
+#include "TestContactsCreateDB.h"
+#include "TestContactsAddEntries.h"
+
+// __EDIT_ME__ - Substitute the name of the test server
+_LIT(KServerName,"Smoketest_Contacts_Server");
+// __EDIT_ME__ - Use your own server class name
+CSmoketestContactsServer* CSmoketestContactsServer::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.
+ */
+	{
+	CSmoketestContactsServer * server = new (ELeave) CSmoketestContactsServer();
+	CleanupStack::PushL(server);
+	// CServer base class call
+	server->StartL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CSmoketestContactsServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CSmoketestContactsServer::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());
+        
+        if (!err) { }
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+
+// __EDIT_ME__ - Use your own server class name
+CTestStep* CSmoketestContactsServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Secure and non-secure variants
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+// __EDIT_ME__ - Create your own test steps here
+	if(aStepName == _L("AddEntries"))
+		testStep = new CTestContactsAddEntries();
+	if(aStepName == _L("CreateDB"))
+		testStep = new CTestContactsCreateDB();
+
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/src/TestContact.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,491 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContact
+// 
+//
+
+#include <cntfldst.h>
+
+#include "TestContact.h"
+
+CTestContact* CTestContact::NewL(CContactItem& aSeedContact)
+	{
+	CTestContact* self=CTestContact::NewLC(aSeedContact);
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestContact* CTestContact::NewLC(CContactItem& aSeedContact)
+	{
+	CTestContact* self=new(ELeave) CTestContact();
+	CleanupStack::PushL(self);
+	self->ConstructL(aSeedContact);
+	return self;
+	}
+
+CTestContact* CTestContact::NewL(CContactItem* aSeedContact)
+	{
+	CTestContact* self=CTestContact::NewLC(aSeedContact);
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestContact* CTestContact::NewLC(CContactItem* aSeedContact)
+	{
+	CTestContact* self=new(ELeave) CTestContact();
+	CleanupStack::PushL(self);
+	self->ConstructL(aSeedContact);
+	return self;
+	}
+
+CTestContact::CTestContact() : iDestroyOnExit(EFalse)
+	{
+	}
+
+void CTestContact::ConstructL(CContactItem& aSeedContact)
+	{
+	iDestroyOnExit=ETrue;
+	iContactItem=CContactCard::NewL(&aSeedContact);
+	}
+
+void CTestContact::ConstructL(CContactItem* aSeedContact)
+	{
+	iDestroyOnExit=EFalse;
+	iContactItem=aSeedContact;
+	}
+
+CTestContact::~CTestContact()
+	{
+	if (iDestroyOnExit)
+		delete iContactItem;
+	iContactItem=NULL;
+	}
+
+CContactItem& CTestContact::ContactItem()
+	{
+	return *iContactItem;
+	}
+
+const TPtrC CTestContact::FirstNameL()
+	{
+	return TextFieldL(KUidContactFieldGivenName);
+	}
+
+const TPtrC CTestContact::LastNameL()
+	{
+	return TextFieldL(KUidContactFieldFamilyName);
+	}
+
+const TPtrC CTestContact::CompanyNameL()
+	{
+	return TextFieldL(KUidContactFieldCompanyName);
+	}
+
+const TPtrC CTestContact::JobTitleL()
+	{
+	return TextFieldL(KUidContactFieldJobTitle);
+	}
+
+const TPtrC CTestContact::WorkPhoneL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::WorkMobileL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::HomePhoneL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::HomeMobileL()
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	const TPtrC text=TextFieldL(*contentType);
+	CleanupStack::PopAndDestroy(); // contentType.
+	return text;
+	}
+
+const TPtrC CTestContact::FaxL()
+	{
+	return TextFieldL(KUidContactFieldFax);
+	}
+
+const TPtrC CTestContact::EmailAddressL()
+	{
+	return TextFieldL(KUidContactFieldEMail);
+	}
+
+const TPtrC CTestContact::InternetAddressL()
+	{
+	return TextFieldL(KUidContactFieldUrl);
+	}
+
+const TPtrC CTestContact::StreetL()
+	{
+	return TextFieldL(KUidContactFieldAddress);
+	}
+
+const TPtrC CTestContact::TownL()
+	{
+	return TextFieldL(KUidContactFieldLocality);
+	}
+
+const TPtrC CTestContact::CountyL()
+	{
+	return TextFieldL(KUidContactFieldRegion);
+	}
+
+const TPtrC CTestContact::PostCodeL()
+	{
+	return TextFieldL(KUidContactFieldPostcode);
+	}
+
+const TPtrC CTestContact::CountryL()
+	{
+	return TextFieldL(KUidContactFieldCountry);
+	}
+
+const TPtrC CTestContact::NotesL()
+	{
+	return TextFieldL(KUidContactFieldNote);
+	}
+
+const TPtrC CTestContact::NickNameL()
+	{
+	return TextFieldL(KUidContactFieldSecondName);
+	}
+
+const TPtrC CTestContact::PictureL()
+	{
+	return TextFieldL(KUidContactFieldPicture);
+	}
+
+void CTestContact::SetFirstNameL(const TDesC& aFirstName)
+	{
+ 	SetTextFieldL(KUidContactFieldGivenName, aFirstName, KUidContactFieldVCardMapUnusedN);
+	}
+
+void CTestContact::SetLastNameL(const TDesC& aLastName)
+	{
+ 	SetTextFieldL(KUidContactFieldFamilyName, aLastName, KUidContactFieldVCardMapUnusedN);
+	}
+
+void CTestContact::SetCompanyNameL(const TDesC& aCompanyName)
+	{
+	SetTextFieldL(KUidContactFieldCompanyName, aCompanyName, KUidContactFieldVCardMapORG);
+	}
+
+void CTestContact::SetJobTitleL(const TDesC& aJobTitle)
+	{
+	SetTextFieldL(KUidContactFieldJobTitle,aJobTitle);
+	}
+
+void CTestContact::SetWorkPhoneL(const TDesC& aWorkPhone)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	SetTextFieldL(*contentType,aWorkPhone);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetWorkMobileL(const TDesC& aWorkMobile)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	SetTextFieldL(*contentType,aWorkMobile);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetHomePhoneL(const TDesC& aHomePhone)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	SetTextFieldL(*contentType,aHomePhone);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetHomeMobileL(const TDesC& aHomeMobile)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	SetTextFieldL(*contentType,aHomeMobile);
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetFaxL(const TDesC& aFax)
+	{
+	SetTextFieldL(KUidContactFieldFax,aFax);
+	}
+
+void CTestContact::SetHomeEmailAddressL(const TDesC& aEmailAddress)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldEMail);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	SetTextFieldL(*contentType,aEmailAddress);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+void CTestContact::SetWorkEmailAddressL(const TDesC& aEmailAddress)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldEMail);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	SetTextFieldL(*contentType,aEmailAddress);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+
+void CTestContact::SetInternetAddressL(const TDesC& aInternetAddress)
+	{
+	SetTextFieldL(KUidContactFieldUrl,aInternetAddress);
+	}
+
+void CTestContact::SetStreetL(const TDesC& aStreet)
+	{
+	SetTextFieldL(KUidContactFieldAddress,aStreet);
+	}
+
+void CTestContact::SetTownL(const TDesC& aTown)
+	{
+	SetTextFieldL(KUidContactFieldLocality,aTown);
+	}
+
+void CTestContact::SetCountyL(const TDesC& aCounty)
+	{
+	SetTextFieldL(KUidContactFieldRegion,aCounty);
+	}
+
+void CTestContact::SetPostCodeL(const TDesC& aPostCode)
+	{
+	SetTextFieldL(KUidContactFieldPostcode,aPostCode);
+	}
+
+void CTestContact::SetCountryL(const TDesC& aCountry)
+	{
+	SetTextFieldL(KUidContactFieldCountry,aCountry);
+	}
+
+void CTestContact::SetNotesL(const TDesC& aNotes)
+	{
+	SetTextFieldL(KUidContactFieldNote,aNotes);
+	}
+
+void CTestContact::SetNickNameL(const TDesC& aNickName)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldSecondName);
+	TRAPD(err, SetTextFieldL(*contentType,aNickName));
+        if (!err) { }
+	CleanupStack::PopAndDestroy(); // contentType.
+	}
+
+void CTestContact::SetPictureL(const TDesC8& aPicture)
+	{
+	CContentType* contentType=CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPicture);
+	SetPictureFieldL(aPicture);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+const TPtrC CTestContact::TextFieldL(TFieldType aFieldType) const
+	{
+	CContactItemField& field=FindFieldL(aFieldType);
+	ASSERT(field.StorageType()==KStorageTypeText);
+	return STATIC_CAST(CContactTextField*,(field.Storage()))->Text();
+	}
+
+const TPtrC CTestContact::TextFieldL(const CContentType& aTypesToMatch) const
+	{
+	CContactItemField& field=FindFieldL(aTypesToMatch);
+	ASSERT(field.StorageType()==KStorageTypeText);
+	return STATIC_CAST(CContactTextField*,field.Storage())->Text();
+	}
+
+void CTestContact::InsertTextFieldL(TFieldType aID, const TDesC& aStringOfStuff )
+	{
+ 	CContactItemField* itemFieldPtr = NULL;
+ 	CContactTextField* textStoragePtr = NULL;
+
+ 	itemFieldPtr = CContactItemField::NewLC( KStorageTypeText, aID );
+ 	textStoragePtr = itemFieldPtr->TextStorage(); // we don't have ownership here, hence no stack.
+
+ 	textStoragePtr->SetTextL( aStringOfStuff );
+ 	textStoragePtr = NULL; // we've finished with this ptr now.
+
+ 	iContactItem->AddFieldL( *itemFieldPtr ); // hand ownership over here
+ 	CleanupStack::Pop( itemFieldPtr ); // and pop,
+	}
+
+void CTestContact::SetTextFieldL(TFieldType aFieldType,const TDesC& aText)
+	{
+ 	TInt	fieldIndex=FindField(aFieldType);
+
+ 	if ( fieldIndex > KErrNotFound )
+		{
+ 		CContactItemField&	field=FindFieldL(aFieldType);
+ 		ASSERT(field.StorageType()==KStorageTypeText);
+ 		STATIC_CAST(CContactTextField*,field.Storage())->SetText(aText.AllocL());
+		}
+ 	else
+		{
+ 		InsertTextFieldL(aFieldType, aText);
+		}
+	}
+
+void CTestContact::SetTextFieldL(const CContentType& aTypesToMatch,const TDesC& aText) const
+	{
+	CContactItemField& field=FindFieldL(aTypesToMatch);
+	ASSERT(field.StorageType()==KStorageTypeText);
+	STATIC_CAST(CContactTextField*,field.Storage())->SetText(aText.AllocL());
+	}
+
+CContactItemField& CTestContact::FindFieldL(TFieldType aFieldType) const
+	{
+	CContactItemFieldSet& fields=iContactItem->CardFields();
+	TInt index=fields.Find(aFieldType);
+	User::LeaveIfError(index);
+	return fields[index];
+	}
+
+void CTestContact::SetTextFieldL(TFieldType aFieldType, const TDesC& aText, TUid aAddOnContentType)
+	{
+	CContactItemFieldSet& fields = iContactItem->CardFields();
+	CContactTextField* textField = NULL;
+	TInt fieldIndex = 0;
+
+	fieldIndex = FindField( aFieldType );
+
+	if (fieldIndex == KErrNotFound )
+		{
+		InsertTextFieldL( aFieldType, aText );
+		fieldIndex = FindField( aFieldType );
+		CContactItemField& field = fields[ fieldIndex ];
+		field.AddFieldTypeL( aAddOnContentType );
+		}
+		else if (fieldIndex >= KErrNone )
+		{
+		CContactItemField& field = fields[ fieldIndex ];
+		ASSERT(field.StorageType()==KStorageTypeText);
+		textField = static_cast<CContactTextField*>(field.Storage());
+		textField->SetText( aText.AllocL() );
+		field.AddFieldTypeL( aAddOnContentType );
+		}
+	}
+
+TInt CTestContact::FindField(TFieldType aFieldType) const
+	{
+	return iContactItem->CardFields().Find( aFieldType );
+	}
+
+CContactItemField& CTestContact::FindFieldL(const CContentType& aTypesToMatch) const
+	{
+	CContactItemFieldSet& fields=iContactItem->CardFields();
+	const TInt numTypesToMatch(aTypesToMatch.FieldTypeCount());
+	const TFieldType mainFieldType(aTypesToMatch.FieldType(0));
+	TInt index=-1;
+	FOREVER
+		{
+		index=fields.FindNext(mainFieldType,index+1);
+		User::LeaveIfError(index);
+
+		CContactItemField& thisPhoneField=fields[index];
+		const CContentType& thisPhoneFieldTypes=thisPhoneField.ContentType();
+		const TInt numFieldTypes(thisPhoneFieldTypes.FieldTypeCount());
+
+		if (numFieldTypes!=numTypesToMatch)
+			{
+			continue;
+			}
+
+		TInt numTypesLeftToMatch=numTypesToMatch;
+		for (TInt ii=0;ii<numFieldTypes;++ii)
+			{
+			TFieldType thisFieldType(thisPhoneFieldTypes.FieldType(ii));
+			for (TInt jj=0;jj<numTypesToMatch;++jj)
+				{
+				TFieldType thisFieldTypeToMatch(aTypesToMatch.FieldType(jj));
+				if (thisFieldType==thisFieldTypeToMatch)
+					{
+					if (--numTypesLeftToMatch<=0)
+						{
+						return thisPhoneField;
+						}
+
+					break;
+					}
+				}
+			}
+		}
+	}
+
+void CTestContact::SetPictureFieldL(const TDesC8& aPicture) const
+	{
+
+	CContactItemFieldSet& fieldSet=iContactItem->CardFields();
+	TInt pos;
+	pos=fieldSet.Find(KUidContactFieldPicture);
+	User::LeaveIfError(pos);
+	fieldSet[pos].StoreStorage()->SetThingL(aPicture);
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/src/TestContactsAddEntries.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,408 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsAddEntries
+// 
+//
+
+// Epoc include
+#include <test/testexecutelog.h>
+
+// User include
+#include "TestContactsAddEntries.h"
+#include "TestContact.h"
+
+/*@{*/
+// Literal constants
+_LIT(KCardTemplateName,	"TestTemplate");
+_LIT(KCount,			"count");
+_LIT(KFirstName,		"firstname%d");
+_LIT(KLastName,			"lastname%d");
+_LIT(KCompanyName,		"company%d");
+_LIT(KJobTitle,			"job%d");
+_LIT(KWorkPhone,		"workphone%d");
+_LIT(KWorkMobile,		"workmobile%d");
+_LIT(KHomePhone,		"homephone%d");
+_LIT(KHomeMobile,		"homemobile%d");
+_LIT(KFax,				"fax%d");
+_LIT(KWorkEmailAddress,	"workemail%d");
+_LIT(KInternetAddress,	"internet%d");
+_LIT(KStreet,			"street%d");
+_LIT(KTown,				"town%d");
+_LIT(KCounty,			"county%d");
+_LIT(KPostCode,			"postcode%d");
+_LIT(KCountry,			"country%d");
+_LIT(KNotes,			"notes%d");
+_LIT(KNickName,			"nickName%d");
+_LIT(KPictureName,		"picturename%d");
+_LIT(KGroupName,		"groupname%d");
+_LIT(KTemplateName,		"templatename%d");
+_LIT(KOneFieldTemplate,	"OneFieldTemplate");
+/*@}*/
+
+
+CTestContactsAddEntries::CTestContactsAddEntries()
+/**
+Default Constructor
+ */
+	{
+	SetTestStepName(_L("AddEntries"));
+	}
+
+CTestContactsAddEntries::~CTestContactsAddEntries()
+/**
+Destructor
+ */
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestContactsAddEntries::doTestStepL()
+/**
+invoked by the test execute framework for exercising the
+functionality under test
+@return	EPass: The test passed succesfully;
+		EFail: The test failed;
+		EInconclusive: The result of the test was inconclusive;
+		ETestSuiteError: Error in the test suite;
+		EAbort: The test was aborted;
+		EIgnore: The test was unexecuted
+@leave system wide error codes
+*/
+	{
+
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Contacts Add Entries Test"));
+
+	OpenDatabase();
+	if ( TestStepResult() == EPass )
+		{
+		TRAPD(r, AddEntriesL());
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Test step failed with error code = %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	CleanupDatabase();
+
+	// test steps return a result
+	return TestStepResult();
+	}
+
+void CTestContactsAddEntries::AddEntriesL()
+/**
+This function adds contact entries to the database depending on entry type.
+If the entry contains the group name then the contact will be added to the
+particular group specified in the entry. If the entry contains the template
+name then the contact item depending on the specified template name will be
+created and added to the database.
+
+@leave system wide error code
+ */
+	{
+	TBool	groupExists = EFalse;
+	TBool	templateFound = EFalse;
+	TInt	count=1;
+
+	if ( !GetIntFromConfig(ConfigSection(), KCount, count) )
+		{
+		count=1;
+		}
+
+	INFO_PRINTF2(_L("Number of Entries to Add = %d"), count);
+
+	TBuf<KMaxScriptLineLength>	tempStore;
+	TPtrC						ptrString;
+
+	/*******************************************************************
+	 To Create a contact card template depending upon the contact item
+	 on which the new template's field set is based. The template name
+	 on which the new template is based is read from the ini file.
+	 *******************************************************************/
+
+	for (TInt entry=0; entry<count; )
+		{
+		CContactItem* item = NULL;
+
+		// The entry contains the template name
+		tempStore.Format(KTemplateName(), ++entry);
+		if (!GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("Entry %d has no Template Name"), entry);
+			item = iDatabase->CreateContactCardTemplateLC(KCardTemplateName);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Template Name = %S"), &ptrString);
+			CContactIdArray* templateList = NULL;
+			CContactItem* tempTemplate = NULL;
+
+			// Returns a copy of the database's template ID list
+			templateList = iDatabase->GetCardTemplateIdListL();
+			CleanupStack::PushL(templateList);
+
+			// Returns the number of contact card templates that currently exist in the database.
+			TInt tCount = iDatabase->TemplateCount();
+			INFO_PRINTF2(_L("Number of existing templates = %d"), tCount);
+
+			// Search for template in the template ID list
+			for(TInt i = 0; i<tCount && templateFound == EFalse;i++)
+				{
+				// Reads a contact item
+				tempTemplate = STATIC_CAST(CContactItem*, iDatabase->ReadContactLC((*templateList)[i]));
+
+				// Gets the label for a contact card template.
+				TPtrC tempLabel = STATIC_CAST(CContactCardTemplate*,tempTemplate)->GetTemplateLabelL();
+
+							// Compare the template label
+				if(!(tempLabel.Compare(ptrString)))
+					{
+					INFO_PRINTF2(_L("Template %S found"), &tempLabel);
+
+					// Creates a contact card template and adds it to the database
+					item = iDatabase->CreateContactCardTemplateLC(tempTemplate,tempLabel);
+
+					// Compare the template label with OneFieldTemplate and add field to it.
+					if(!(tempLabel.Compare(KOneFieldTemplate)))
+						{
+						// Allocates and constructs a contact item field
+						CContactItemField* field=CContactItemField::NewLC(KStorageTypeText,KUidContactFieldGivenName);
+						item->AddFieldL(*field);
+						CleanupStack::Pop(field); // field
+						}
+					CleanupStack::Pop(item);
+					templateFound = ETrue;
+					}
+				  CleanupStack::PopAndDestroy(tempTemplate);
+				}
+
+			if (!templateFound)
+				{
+				ERR_PRINTF2(_L("Ini Template %S does not match existing templates"), &ptrString);
+				SetTestStepResult(EFail);
+				}
+
+			// Set templateFound to false for next entry
+			templateFound = EFalse;
+
+			CleanupStack::PopAndDestroy(templateList);
+			CleanupStack::PushL(item);
+			}
+
+		CTestContact*	contact=CTestContact::NewLC(*item);
+
+		tempStore.Format(KFirstName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("firstname = %S"), &ptrString);
+			contact->SetFirstNameL(ptrString);
+			}
+
+		tempStore.Format(KNickName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("NickName = %S"), &ptrString);
+			TRAPD(err, contact->SetNickNameL(ptrString));
+			if ( err != KErrNone )
+				{
+				ERR_PRINTF2(_L("SetNickNameL Leave = %d"), err);
+				SetTestStepResult(EFail);
+				}
+			}
+
+		tempStore.Format(KLastName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("lastname = %S"), &ptrString);
+			contact->SetLastNameL(ptrString);
+			}
+
+		tempStore.Format(KCompanyName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("company = %S"), &ptrString);
+			contact->SetCompanyNameL(ptrString);
+			}
+
+		tempStore.Format(KJobTitle(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("job = %S"), &ptrString);
+			contact->SetJobTitleL(ptrString);
+			}
+
+		tempStore.Format(KWorkPhone(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("work phone = %S"), &ptrString);
+			contact->SetWorkPhoneL(ptrString);
+			}
+
+		tempStore.Format(KWorkMobile(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("work mobile = %S"), &ptrString);
+			contact->SetWorkMobileL(ptrString);
+			}
+
+		tempStore.Format(KHomePhone(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("home phone = %S"), &ptrString);
+			contact->SetHomePhoneL(ptrString);
+			}
+
+		tempStore.Format(KHomeMobile(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("home mobile = %S"), &ptrString);
+			contact->SetHomeMobileL(ptrString);
+			}
+
+		tempStore.Format(KFax(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("fax = %S"), &ptrString);
+			contact->SetFaxL(ptrString);
+			}
+
+		tempStore.Format(KWorkEmailAddress(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("work email = %S"), &ptrString);
+			contact->SetWorkEmailAddressL(ptrString);
+			}
+
+		tempStore.Format(KInternetAddress(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("internet = %S"), &ptrString);
+			contact->SetInternetAddressL(ptrString);
+			}
+
+		tempStore.Format(KStreet(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("street = %S"), &ptrString);
+			contact->SetStreetL(ptrString);
+			}
+
+		tempStore.Format(KTown(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("town = %S"), &ptrString);
+			contact->SetTownL(ptrString);
+			}
+
+		tempStore.Format(KCounty(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("county = %S"), &ptrString);
+			contact->SetCountyL(ptrString);
+			}
+
+		tempStore.Format(KPostCode(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("post code = %S"), &ptrString);
+			contact->SetPostCodeL(ptrString);
+			}
+
+		tempStore.Format(KCountry(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("country = %S"), &ptrString);
+			contact->SetCountryL(ptrString);
+			}
+
+		tempStore.Format(KNotes(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("notes = %S"), &ptrString);
+			contact->SetNotesL(ptrString);
+			}
+
+		tempStore.Format(KPictureName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("Picture Name = %S"), &ptrString);
+
+			HBufC8*	pictureName8 = HBufC8::NewLC(ptrString.Length());
+			pictureName8->Des().Copy(ptrString);
+
+			contact->SetPictureL(*pictureName8);
+
+			CleanupStack::PopAndDestroy(pictureName8);
+			}
+
+		tempStore.Format(KGroupName(), entry);
+		if (GetStringFromConfig(ConfigSection(), tempStore, ptrString))
+			{
+			INFO_PRINTF2(_L("Group Name = %S"), &ptrString);
+
+			// Flag for adding contacts to group.
+			groupExists = ETrue;
+			}
+
+		const TContactItemId id = iDatabase->AddNewContactL(contact->ContactItem());
+
+		/********************************************************************
+		This is for adding the contact entry to the specified group.
+		********************************************************************/
+		if(groupExists)
+			{
+			INFO_PRINTF1(_L("Adding Item "));
+			CContactIdArray* groupList = NULL;
+
+			// Returns a copy of the database's group ID list
+			groupList = iDatabase->GetGroupIdListL();
+			CleanupStack::PushL(groupList);
+
+			// Returns the number of groups that currently exist in the database
+			TInt groupCount = iDatabase->GroupCount();
+
+
+			// Search for the group
+			for(TInt i = 0; i<groupCount;i++)
+				{
+				// Reads a contact item
+				CContactGroup* group = STATIC_CAST(CContactGroup*, iDatabase->ReadContactLC((*groupList)[i]));
+
+				// Gets the contact item's ID.
+				const TContactItemId groupId1 = group->Id();
+
+				// Gets the group label.
+				TPtrC	label = group->GetGroupLabelL();
+				// Compare the group label with group name read from ini file.
+				if(!(label.Compare(ptrString)))
+					{
+					/**
+					Sets a contact item which already exists in the database
+					to be a member of a contact group
+					 */
+					iDatabase->AddContactToGroupL(id, groupId1);
+					INFO_PRINTF1(_L("Item added successfully"));
+					groupExists = EFalse;
+					}
+				CleanupStack::PopAndDestroy(group);
+
+				}
+			CleanupStack::PopAndDestroy(groupList);
+			}
+
+		CleanupStack::PopAndDestroy(contact);
+		CleanupStack::PopAndDestroy(item);
+
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/src/TestContactsBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,176 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 CTestContactsBase
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <test/testexecutelog.h>
+
+// User include
+#include "TestContactsBase.h"
+
+/*@{*/
+// Literal constants
+_LIT(KDef,			"default");
+_LIT(KFileName,		"filenameSecure");
+_LIT(KKey,			"key");
+/*@}*/
+
+
+// constructor
+CTestContactsBase::CTestContactsBase()
+:	iDatabase(NULL)
+,	iFieldDef(NULL)
+,	iSchedular(NULL)
+	{
+	}
+
+// destructor
+CTestContactsBase::~CTestContactsBase()
+	{
+	delete iFieldDef;
+	iFieldDef=NULL;
+
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+	}
+
+enum TVerdict CTestContactsBase::doTestStepPreambleL()
+	{
+	iSchedular=new (ELeave)CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+
+	iFieldDef=new(ELeave) CContactItemFieldDef;
+	iFieldDef->AppendL(KUidContactFieldFamilyName);
+	iFieldDef->AppendL(KUidContactFieldGivenName);
+	return CTestStep::doTestStepPreambleL();
+	}
+
+enum TVerdict CTestContactsBase::doTestStepPostambleL()
+	{
+	delete iFieldDef;
+	iFieldDef=NULL;
+
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+
+	return CTestStep::doTestStepPostambleL();
+	}
+
+// Create a new database
+void CTestContactsBase::CreateDatabase()
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if (!returnValue)
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+
+	//	Create database
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		TRAPD(r, iDatabase=CContactDatabase::ReplaceL(ptrFileName))
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Creating Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("No Contacts file specified. Open default file."));
+		TRAPD(r, iDatabase=CContactDatabase::ReplaceL())
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Creating Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	}
+
+void CTestContactsBase::OpenDatabase()
+	{
+	TPtrC	ptrFileName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KFileName, ptrFileName);
+	if (!returnValue)
+		returnValue=GetStringFromConfig(KDef, KFileName, ptrFileName);
+
+	//	Open database
+	if (returnValue)
+		{
+		INFO_PRINTF2(_L("filename = %S"), &ptrFileName);
+		RaiseInstrumentationEventNotificationL(17);
+		TRAPD(r, iDatabase=CContactDatabase::OpenL(ptrFileName));
+		RaiseInstrumentationEventNotificationL(18);
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Opening Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("No Contacts file specified. Open default file."));
+		RaiseInstrumentationEventNotificationL(17);
+		TRAPD(r, iDatabase=CContactDatabase::OpenL());
+		RaiseInstrumentationEventNotificationL(18);
+		if (r!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Opening Contacts file failed. Error %d"), r);
+			SetTestStepResult(EFail);
+			}
+		}
+	}
+
+void CTestContactsBase::CleanupDatabase()
+	{
+	delete iDatabase;
+	iDatabase=NULL;
+	}
+
+void CTestContactsBase::RaiseInstrumentationEventNotificationL(TInt aEventTag)
+	{
+	INFO_PRINTF2(_L("RaiseEventNotification %d"), aEventTag);
+	}
+
+CContactIdArray* CTestContactsBase::SearchEntriesL()
+/**
+This function searches in the contacts database and populates an array
+with ids' of the contacts which satisfy the search criterion
+read from the ini file.
+@return - Pointer to the contact ID array
+@leave system wide error code
+ */
+	{
+	TPtrC	ptrKey;
+	if (!GetStringFromConfig(ConfigSection(), KKey, ptrKey))
+		{
+		ERR_PRINTF1(_L("No key value for entry"));
+		SetTestStepResult(EFail);
+		}
+	INFO_PRINTF2(_L("Key Value for Entry Search = %S"), &ptrKey);
+
+	// The function searches the fields contained in the field definition
+	INFO_PRINTF1(_L("Searching through the database for entry"));
+
+	CContactIdArray*	ret=iDatabase->FindLC(ptrKey, iFieldDef);
+	CleanupStack::Pop(ret);
+	return ret;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/src/TestContactsCreateDB.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,42 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestContactsCreateDB
+// 
+//
+
+#include <test/testexecutelog.h>
+
+#include "TestContactsCreateDB.h"
+
+CTestContactsCreateDB::CTestContactsCreateDB()
+	{
+	SetTestStepName(_L("CreateDB"));
+	}
+
+CTestContactsCreateDB::~CTestContactsCreateDB()
+	{
+	}
+
+// Each test step must supply a implementation for doTestStepL
+enum TVerdict CTestContactsCreateDB::doTestStepL()
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Contacts CreateDB Test"));
+
+	CreateDatabase();
+	CleanupDatabase();
+
+	// test steps return a result
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/contacts/src/sm_contacts.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,2 @@
+[Files MRU]
+0=m:\src\common\generic\smoketest\agenda\src\TestAgendaServerLaunchProgress.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Group/Smoketest_Mess.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,81 @@
+// 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"
+// which accompanies 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			Smoketest_Mess_Server.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x101F7774
+
+#if (!defined __NO_VENDORID__)
+VENDORID		0x70000001
+#endif
+
+CAPABILITY		ReadUserData WriteUserData WriteDeviceData NetworkServices
+
+#if (defined _PLATTEST_CDMA_)
+MACRO			CDMA_API_ENABLED
+MACRO			GSM_COMPATIBILITY_MODE
+#endif
+
+SOURCEPATH		..\Src
+
+SOURCE			TestMessServer.cpp
+SOURCE			TestMessSession.cpp
+SOURCE			TestMessSharedData.cpp
+SOURCE			TestMessWatcher.cpp
+SOURCE			TestMessProcessor.cpp
+SOURCE			TestMessTimer.cpp
+SOURCE			TestMessBase.cpp
+SOURCE			TestMessCleanMessageFolder.cpp
+SOURCE			TestMessCreateSmsAccount.cpp
+SOURCE			TestMessSetDefaultSc.cpp
+SOURCE			TestMessCreateSMS.cpp
+SOURCE			TestMessCreateGsmSmsUtil.cpp
+#ifdef _PLATTEST_CDMA_
+SOURCE			TestMessCreateCdmaSmsUtil.cpp
+#endif
+SOURCE			TestMessCreateSmsUtilBase.cpp
+SOURCE			TestMessProcessExistingMsg.cpp
+SOURCE			TestMessEditEntry.cpp
+SOURCE			TestMessStoreProcessUtil.cpp
+SOURCE			TestMessEditEntryUtil.cpp
+SOURCE			TestMessPrintEntryUtil.cpp
+
+USERINCLUDE		..\Inc 
+USERINCLUDE		..\..\Group
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			etel.lib
+LIBRARY			schsend.lib
+LIBRARY			estor.lib
+LIBRARY			euser.lib
+LIBRARY			bafl.lib
+LIBRARY			msgs.lib
+LIBRARY			fbscli.lib
+LIBRARY			imcm.lib
+LIBRARY			efsrv.lib
+LIBRARY			sendas2.lib
+LIBRARY			etext.lib
+LIBRARY			smcm.lib
+
+LIBRARY			gsmu.lib
+LIBRARY			esock.lib
+LIBRARY			smsu.lib
+LIBRARY			TestExecuteUtils.lib 
+LIBRARY			TestExecuteLogClient.lib
+LIBRARY			SmokeTest_Utils.lib
+LIBRARY			etelmm.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,46 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 test system build description file for self test suite
+// 
+//
+
+PRJ_EXPORTS
+../Scripts/Smoketest_CreateSmsAccount.script			/epoc32/release/wins/udeb/z/smoketest/smoketest_createsmsaccount.script
+../Scripts/Smoketest_CreateSmsAccount.script			/epoc32/release/wins/urel/z/smoketest/smoketest_createsmsaccount.script
+../Scripts/Smoketest_CreateSmsAccount.script			/epoc32/release/winscw/udeb/z/smoketest/smoketest_createsmsaccount.script
+../Scripts/Smoketest_CreateSmsAccount.script			/epoc32/release/winscw/urel/z/smoketest/smoketest_createsmsaccount.script
+
+../Scripts/setup_Smoketest_Mess.script					/epoc32/release/wins/udeb/z/smoketest/setup_smoketest_mess.script
+../Scripts/setup_Smoketest_Mess.script					/epoc32/release/wins/urel/z/smoketest/setup_smoketest_mess.script
+../Scripts/setup_Smoketest_Mess.script					/epoc32/release/winscw/udeb/z/smoketest/setup_smoketest_mess.script
+../Scripts/setup_Smoketest_Mess.script					/epoc32/release/winscw/urel/z/smoketest/setup_smoketest_mess.script
+
+../Scripts/Smoketest_Mess.script					/epoc32/release/wins/udeb/z/smoketest/smoketest_mess.script
+../Scripts/Smoketest_Mess.script					/epoc32/release/wins/urel/z/smoketest/smoketest_mess.script
+../Scripts/Smoketest_Mess.script					/epoc32/release/winscw/udeb/z/smoketest/smoketest_mess.script
+../Scripts/Smoketest_Mess.script					/epoc32/release/winscw/urel/z/smoketest/smoketest_mess.script
+
+../TestData/Sms/Message1.txt					/epoc32/release/wins/udeb/z/smoketest/sms/message1.txt
+../TestData/Sms/Message1.txt					/epoc32/release/wins/urel/z/smoketest/sms/message1.txt
+../TestData/Sms/Message1.txt					/epoc32/release/winscw/udeb/z/smoketest/sms/message1.txt
+../TestData/Sms/Message1.txt					/epoc32/release/winscw/urel/z/smoketest/sms/message1.txt
+
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/wins/udeb/z/smoketest/smoketest_mess.ini
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/wins/urel/z/smoketest/smoketest_mess.ini
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/winscw/udeb/z/smoketest/smoketest_mess.ini
+../TestData/Smoketest_Mess.ini			   		/epoc32/release/winscw/urel/z/smoketest/smoketest_mess.ini
+
+
+PRJ_TESTMMPFILES
+Smoketest_Mess.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMess.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,26 @@
+// 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:
+// This contains CTestMess which contains common constants
+// 
+//
+
+#if (!defined __TEST_MESS_H__)
+#define __TEST_MESS_H__
+
+/*@{*/
+// Literals defined for SMS account details
+_LIT(KSmsAccountName,	"Short Message");
+/*@}*/ 
+
+#endif /* __TEST_MESS_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,126 @@
+// 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"
+// which accompanies 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 contains CTestMessBase which is the base class for all 
+// messaging test steps
+// 
+//
+
+
+#if (!defined __TEST_MESS_BASE_H__)
+#define __TEST_MESS_BASE_H__
+
+#include "Configuration.cfg"
+
+#include <msvapi.h>
+#include <smuthdr.h>
+#include <test/testexecutestepbase.h>
+#include <emsformatie.h>
+#include <emssoundie.h>
+#include <emsanimationie.h>
+#include <iapprefs.h>
+
+#include "TestMessProcessor.h"
+#include "TestMessTimer.h"
+
+#include <smut.h>
+#include <smutset.h>
+#include <etelmm.h>
+#if (defined CDMA_API_ENABLED)
+#include <SmsMessageWrappers.h>
+#include <SmsMessageSettings.h>
+#endif
+#include <smuthdr.h>
+
+#include <test/teststepsmoketest.h>
+//To check whether the reply quoted is set
+_LIT(KReplyQuoted,		"SmsReplyQuoted");
+
+const TUid KUidMsvSMSHeaderStream				= {0x10001834};
+const TUid KUidMsgFileInternetAccessPreferences	= {0x1000924B};
+const TUid KUidMsvDefaultServices				= {0x100017FD};
+
+const TInt	KOneSecond = 1000000;
+
+class	CParaFormatLayer;
+class 	CCharFormatLayer;
+class 	CRichText;
+
+class CTestMessBase : public CTestStepSmokeTest, private MMsvSessionObserver
+	{
+public:
+	CTestMessBase(TBool aSetDirectory);
+	virtual ~CTestMessBase();
+
+	virtual TVerdict	doTestStepPreambleL();
+	virtual TVerdict	doTestStepPostambleL();
+
+	void							SetEntryL(TMsvId	aId);
+	CMsvEntry&						EntryL();
+	TBool							HasEntry() const { return iEntry!=NULL; }
+	const TMsvSelectionOrdering&	SelectionOrdering() const { return iOrder; }
+	CMsvSession&					Session() const { return *iSession; }
+	void							PrintEntryL(CMsvEntry& aEntry);
+	CEmsPreDefSoundIE*				NewPreDefSoundL(const TDesC& aPreDefType);
+
+
+protected:
+	//	MMsvSessionObserver
+	void			HandleSessionEventL(TMsvSessionEvent, TAny*, TAny*, TAny*);
+
+	//	Utilities
+	static HBufC8*	CopyToBuf8LC(const TDesC& aPtrC);
+	static HBufC*	CopyToBufLC(const TDesC8& aPtr8);
+	void			PrintTreeL(TMsvId aRoot);
+	void			IssueTimerRequest();
+
+
+	void			PrepareSmsHeaderFromIniFileL(CSmsHeader& aSmsHeader);
+
+	//reads the schedule time from ini file
+	TTimeIntervalMinutes	ReadScheduleTime();
+
+private:
+	//	PrintEntry helper functions
+	void			PrintStoreL(CMsvEntry& aEntry);
+	void			PrintStoreSmtpL(CMsvEntry& aEntry);
+	void			PrintStorePop3L(CMsvEntry& aEntry);
+	void			PrintStoreImap4L(CMsvEntry& aEntry);
+	void			PrintStoreSmsL(CMsvEntry& aEntry);
+
+	//	PrepareSmsHeaderFromIniFileL helper functions
+	void			SetAlignmentFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aAlignment);
+	void			SetFontSizeFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aFontSize);
+
+	CEmsPreDefAnimationIE*	NewPreDefAnimationL(const TDesC& aPreDefType);
+	CFbsBitmap*				NewBitmapL(const TParse& aFileName, const TDesC& aObjectSize);
+
+protected:
+	CMsvSession*				iSession;
+	CTestMessProcessor*			iMessageProcessor;
+	CParaFormatLayer*			iParaFormatLayer;
+ 	CCharFormatLayer*			iCharFormatLayer;
+ 	CRichText*					iBodyText;
+    TBool						iBodyAvailable;
+
+
+private:
+    TBool						iCheckForSim;
+	TBool						iSetDirectory;
+	CTestMessTimer*				iMessageTimer;
+	CActiveScheduler*			iSchedular;
+	CMsvEntry*					iEntry;
+	TMsvSelectionOrdering		iOrder;
+	};
+
+#endif /* __TEST_MESS_BASE_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessCleanMessageFolder.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+// 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"
+// which accompanies 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 contains CTestMessCleanMessageFolder which cleans out all the
+// message folders
+// 
+//
+
+#if (!defined __TEST_MESS_CLEAN_MESSAGE_FOLDER_H__)
+#define __TEST_MESS_CLEAN_MESSAGE_FOLDER_H__
+
+#include "TestMessBase.h"
+
+class CTestMessCleanMessageFolder : public CTestMessBase
+{
+public:
+	CTestMessCleanMessageFolder();
+
+	virtual	TVerdict	doTestStepL();
+
+private:
+	void	CleanFolders(const TMsvId aEntryId);
+
+private:
+	TInt	iNumberOfMessagesToDelete;
+};
+
+#endif /* __TEST_MESS_CLEAN_MESSAGE_FOLDER_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessCreateCdmaSmsUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,56 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 creates a Cdma sms header and service settings. It sets the fields by reading
+// from the ini file
+// 
+//
+ 
+
+#if (!defined __TEST_MESS_CREATE_CDMA_SMS_UTIL_H__)
+#define __TEST_MESS_CREATE_CDMA_SMS_UTIL_H__
+
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ This class creates a Cdma sms header and service settings.It sets the fields by reading
+ from the ini file
+*/
+class CTestMessCreateCdmaSmsUtil : public CTestMessCreateSmsUtilBase
+{
+public:
+	//Constructor
+	CTestMessCreateCdmaSmsUtil(CTestMessBase &aTestStep);
+
+	//Creates a new header
+	CSmsHeader* NewHeaderL(CRichText &aBodyText);
+
+	//Sets the fields of the header
+	void PrepareHeaderL(CSmsHeader &aSmsHeader);
+
+	//Sets the account settings.
+	void SetSmsAccountSettings(CSmsSettings &aSmsSettings);
+
+private:
+	//Gets the message type of the SMS
+	TSmsMessageType GetMessageTypeId(TPtrC aMessageType);
+	
+	//Gets the tele service ID
+	tia637::TTeleserviceId GetTeleServiceId(TPtrC aTeleService);
+
+	//Gets the message conversion ID
+	TSmsPIDConversion GetMessageConversionId(TPtrC aMessageConversion);
+	
+};
+
+#endif /* __TEST_MESS_CREATE_CDMA_SMS_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessCreateGsmSmsUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,56 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 creates the Gsm sms header and service settings. It fills up the
+// fields using data read from the ini file
+// 
+//
+
+
+#if (!defined __TEST_MESS_CREATE_GSM_SMS_UTIL_H__)
+#define __TEST_MESS_CREATE_GSM_SMS_UTIL_H__
+
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ This class creates the Gsm sms header and the GSM SMS service settings. 
+ The data is read from the ini file.
+*/
+class CTestMessCreateGsmSmsUtil : public CTestMessCreateSmsUtilBase
+	{
+public:
+	//Constructor
+	CTestMessCreateGsmSmsUtil(CTestMessBase &aTestStep);
+
+	/**
+	 Prepare sms account details
+	*/
+	virtual void		PrepareAccountL(CMsvSession& aSession);
+
+	/**
+	 Creates the new header object
+	*/
+	virtual CSmsHeader*	NewHeaderL(CRichText &aBodyText);
+
+	/**
+	 Fills up the fields of the sms header object
+	*/
+	virtual void 		PrepareHeaderL(CSmsHeader &aSmsHeader);
+
+	/**
+	 Fills up the fields of the sms account settings 
+	*/
+	virtual void 		SetSmsAccountSettings(CSmsSettings &aSmsSettings);
+	};
+
+#endif /* __TEST_MESS_CREATE_GSM_SMS_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessCreateSMS.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,64 @@
+// 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"
+// which accompanies 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 contains CTestMessCreateSMS. This class creates the sms message 
+// for GSM or CDMA. For CDMA mtm, it uses utility classes to create 
+// the respective GSM or CDMA sms message
+// 
+//
+
+#if (!defined __TEST_MESS_CREATE_SMS_H__)
+#define __TEST_MESS_CREATE_SMS_H__
+
+//Epoc include
+#include <test/smoketestactive.h>
+#include <sendas2.h>
+#include <csendasaccounts.h>
+#include <csendasmessagetypes.h>
+
+#include "TestMessBase.h"
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ This class creates the sms message for GSM or CDMA. For CDMA mtm, it 
+ uses utility classes to create the respective GSM or CDMA sms message
+*/
+class CTestMessCreateSMS : public CTestMessBase
+,	private MTestActiveCallback
+	{
+public:
+	CTestMessCreateSMS();
+
+	virtual	TVerdict	doTestStepPreambleL();
+	virtual	TVerdict	doTestStepL();
+
+protected:
+	virtual void		AddMtmCapabilitiesL(RSendAs& aSendAs);
+	virtual void		PrepareSendAsL(RSendAsMessage& aSendAs);
+	virtual void		PrepareHeaderL(CTestMessCreateSmsUtilBase& aCreateUtil, CSmsHeader& aSmsHeader);
+	void				ConCatMessageTextL(CSmsHeader& aHeader);
+	void				CreateSmsL(const TMsvId aMsvId, TTimeIntervalMinutes aScheduledTime);
+
+private:
+	virtual void	RunL() { CActiveScheduler::Stop(); }
+	/**
+	* Method from which CTestActive informs the user DoCancel call
+	*/
+	virtual void	DoCancel() { }
+
+private:
+	TBool							iSimInDatabase;
+	RMobilePhone::TMobileAddress	iSimPhoneNumber;
+	};
+
+#endif /* __TEST_MESS_CREATE_SMS_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessCreateSMSaccount.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,36 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessCreateSmsAccount.cpp
+// This contains CTestMessCreateSmsAccount which creates an SMS
+// account folder for GSM or CDMA
+// 
+//
+
+#if (!defined __TEST_MESS_CREATE_SMS_ACCOUNT_H__)
+#define __TEST_MESS_CREATE_SMS_ACCOUNT_H__
+
+#include "TestMessBase.h"
+
+/**
+ This class creates an SMS account folder for GSM or CDMA
+*/
+class CTestMessCreateSmsAccount : public CTestMessBase
+	{
+public:
+	CTestMessCreateSmsAccount();
+
+	virtual	TVerdict	doTestStepL();
+	};
+
+#endif /* __TEST_MESS_CREATE_SMS_ACCOUNT_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessCreateSmsUtilBase.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,81 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 is the base class for create CDMA or GSM SMS utility class
+// 
+//
+
+#if (!defined __TEST_MESS_CREATE_SMS_UTIL_BASE_H__)
+#define __TEST_MESS_CREATE_SMS_UTIL_BASE_H__
+
+#include "TestMessBase.h"
+
+// EPOC includes
+#include <mtmuids.h>
+#include <txtrich.h>
+
+#include <smut.h>
+
+/*@{*/
+_LIT(KBearer,				"bearer");
+_LIT(KEncoding,				"encoding");
+_LIT(KDef,					"default");
+_LIT(KDefBearer,			"smsbearer");
+_LIT(KDefEncoding,			"smsencoding");
+_LIT(KDefDeliveryReport,	"smsDeliveryReport");
+_LIT(KDeliveryReport,		"DeliveryReport");
+_LIT(KRejectDuplicate,		"SmsRejectDuplicate");
+_LIT(KReplyPath,			"SmsReplyPath");
+_LIT(KConCatenate,			"SmsConCatenate");
+
+_LIT(KBearerWap,			"wap");
+_LIT(KBearerWapSecure,		"wapsecure");
+/*@}*/
+
+/**
+ This class is the base class for create GSM or CDMA SMS utility classes
+*/
+class CTestMessCreateSmsUtilBase : public CBase
+	{
+public:
+	//Constructor
+	CTestMessCreateSmsUtilBase(CTestMessBase &aTestStep);
+
+	/**
+	 Prepare sms account details
+	*/
+	virtual void		PrepareAccountL(CMsvSession& aSession) = 0;
+
+	/**
+	 Creates the new header object
+	*/
+	virtual CSmsHeader*	NewHeaderL(CRichText &aBodyText) = 0;
+
+	/**
+	 Fills up the fields of the sms header object
+	*/
+	virtual void 		PrepareHeaderL(CSmsHeader &aSmsHeader) =0;
+
+	/**
+	 Fills up the fields of the sms account settings 
+	*/
+	virtual void 		SetSmsAccountSettings(CSmsSettings &aSmsSettings) =0;
+
+protected:
+	/**
+	 Reference to the test step which creates the utility class
+	*/
+	CTestMessBase&		iTestStep;
+	};
+
+#endif /* __TEST_MESS_CREATE_SMS_UTIL_BASE_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessEditEntry.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,64 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntry which edits the entry characterstics
+// 
+//
+
+
+#if (!defined __TEST_MESS_EDIT_ENTRY_H__)
+#define __TEST_MESS_EDIT_ENTRY_H__
+
+#include "TestMessProcessExistingMsg.h"
+
+/**
+ This class edits the entry characteristics
+*/
+class CTestMessEditEntry : public CTestMessProcessExistingMsg
+{
+public:
+	CTestMessEditEntry() { SetTestStepName(_L("EditEntry")); }
+
+	virtual	void ProcessMessageL(CBaseMtm& aBaseMtm, TMsvId aMsgId);
+
+	//Move the message to different folder
+	void MoveMessageL(TMsvId aMessageId,TMsvId aFolderId);
+
+	/**
+	 This class is used for asynchronous operation for move
+	 message operation
+	*/
+	class CMoveOperation: public CActive
+		{
+	public:
+		//Pure virtual implementation of CActive
+		void RunL();
+
+		//Pure virtual implementation of CActive
+		void DoCancel();
+		
+		//Set the operation as active
+		void SetOperation();
+
+		//Two phase construction
+		static CMoveOperation* NewL();
+	private:
+		//Second phase construction
+		void ConstructL();
+
+		//Constructor
+		CMoveOperation();
+		};
+};
+
+#endif /* __TEST_MESS_EDIT_ENTRY_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessEditEntryUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+// 
+//
+
+#if (!defined __TEST_MESS_EDIT_ENTRY_UTIL_H__)
+#define __TEST_MESS_EDIT_ENTRY_UTIL_H__
+
+#include "TestMessStoreProcessUtil.h"
+
+/**
+ This class is a utility to edit an entry
+*/
+class CTestMessEditEntryUtil : public CTestMessStoreProcessUtil
+{
+public:
+	CTestMessEditEntryUtil(CTestMessBase& aTestStep, TBool aSimChecked, TBool aSimInDatabase, RMobilePhone::TMobileAddress aSimPhoneNumber);
+
+protected:
+	// Process the CImHeader information
+	virtual void	ProcessImHeaderL(CImHeader& aHeader);
+
+	// Process the CImMimeHeader information
+	virtual void	ProcessImMimeHeaderL(CImMimeHeader& aHeader);
+
+	// Process the CImIAPPreferences information
+	virtual void	ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences);
+
+	// Process the CSmsHeader information
+	virtual void	ProcessSmsHeaderStreamL(CSmsHeader& aHeader);
+
+
+	// Process the CRichText information
+	virtual void	ProcessRichTextBodyL(CRichText& aBodyText);
+
+private:
+	TBool							iSimChecked;
+	TBool							iSimInDatabase;
+	RMobilePhone::TMobileAddress	iSimPhoneNumber;
+};
+
+#endif /* __TEST_MESS_EDIT_ENTRY_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessPrintEntryUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+/**
+* 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"
+* which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+* 
+*
+*/
+
+
+
+/**
+ @file TestMessPrintEntryUtil.h
+*/
+
+#if (!defined __TEST_MESS_PRINT_ENTRY_UTIL_H__)
+#define __TEST_MESS_PRINT_ENTRY_UTIL_H__
+
+#include "TestMessStoreProcessUtil.h"
+
+class CTestMessPrintEntryUtil : public CTestMessStoreProcessUtil
+{
+public:
+	CTestMessPrintEntryUtil(CTestMessBase& aTestStep);
+
+protected:
+	// Process the CImHeader information
+	virtual void	ProcessImHeaderL(CImHeader& aHeader);
+
+	// Process the CImMimeHeader information
+	virtual void	ProcessImMimeHeaderL(CImMimeHeader& aHeader);
+
+	// Process the CImIAPPreferences information
+	virtual void	ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences);
+
+	// Process the CSmsHeader information
+	virtual void	ProcessSmsHeaderStreamL(CSmsHeader& aHeader);
+
+
+	// Process the CRichText information
+	virtual void	ProcessRichTextBodyL(CRichText& aBodyText);
+};
+
+#endif /* __TEST_MESS_PRINT_ENTRY_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessProcessExistingMsg.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,43 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessProcessExistingMsg.cpp
+// This contains CTestMessProcessExistingMsg
+// Base class for processing an existing message
+// 
+//
+
+#if (!defined __TEST_MESS_PROCESS_EXISTING_MSG__)
+#define __TEST_MESS_PROCESS_EXISTING_MSG__
+
+#include "TestMessBase.h"
+
+#include <mtclbase.h>
+
+class CTestMessProcessExistingMsg : public CTestMessBase
+{
+public:
+	CTestMessProcessExistingMsg();
+
+	virtual	TVerdict		doTestStepL();
+
+protected:
+	virtual	void			ProcessMessageL(CBaseMtm& aBaseMtm, TMsvId aMsgId) = 0;
+	virtual	void			PostProcessMessageL();
+	TUid					MtmID() const { return iMtmID; }
+
+private:
+	TUid			iMtmID;
+};
+
+#endif /* __TEST_MESS_PROCESS_EXISTING_MSG__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessProcessor.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,86 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessProcessor.cpp
+// This contains CTestMessProcessor which an active object utility
+// used for send/recieving or any time consuming 
+// 
+//
+
+#if (!defined __TEST_MESS_PROCESSOR_H__)
+#define __TEST_MESS_PROCESSOR_H__
+
+//Epoc Include
+#include <e32base.h>
+#include <msvapi.h>
+#include <miuthdr.h>
+
+class CTestStep;
+
+class MTestMessProcessorClient
+	{
+public:
+	virtual TBool			MoreOperations() const = 0;
+	virtual CMsvOperation*	CreateOperationL(TRequestStatus& aStatus) = 0;
+	virtual TInt			DisplayProgressL(TBool aFinalProgress, CMsvOperation* aMsvOperation) = 0;
+	};
+
+/**
+ This class is an active object utility used for send/recieving
+ or any time consuming
+*/
+class CTestMessProcessor : public CActive
+	{
+public:
+	virtual ~CTestMessProcessor();
+	static CTestMessProcessor*	NewL(CTestStep& aTestStep, CMsvSession& aSession);
+
+	void	RunL();
+
+	void	DisplayProgress();
+	void	SendEmailMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient);
+
+	//Sends the SMS message
+	void	SendSmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient, TBool aCancelSms);
+	void	SendMmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient);
+	void	MtmRequestL(TMsvId aAccountId, MTestMessProcessorClient* aClient);
+
+protected:
+	CTestMessProcessor(CTestStep& aTestStep, CMsvSession& aSession /*, MTestInstrumentation& aInstrumentation */);
+	void	ConstructL();
+	void	DoCancel();
+
+private:
+	enum EState
+		{
+		EStatePrepareToSendMsg,
+		EStateRequest,
+		};
+
+	EState						iState;
+	CTestStep&					iTestStep;
+	CMsvSession&				iSession;
+
+	//	Send message parameters saved for RunL
+	CMsvEntry*					iEntry;
+	TMsvId						iMsgId;
+	MTestMessProcessorClient*	iClient;
+	TMsvEntry					iMsgEntry;
+	CMsvOperation*				iMsvOperation;
+	/**
+	 Boolean value for the Cancel sms flag
+	*/
+	TBool						iCancelSms;
+};
+
+#endif /* __TEST_MESS_PROCESSOR_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessServer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,45 @@
+// 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"
+// which accompanies 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 contains CTestMessServer
+// 
+//
+
+#if (!defined __TEST_MESS_SERVER_H_)
+#define __TEST_MESS_SERVER_H_
+
+#include "TestMessWatcher.h"
+#include "TestMessSharedData.h"
+
+#include <test/testexecuteserverbase.h>
+
+class CMsvSession;
+
+class  CTestMessServer : public CTestServer
+{
+public:
+	static CTestMessServer*	NewL();
+	virtual CTestStep*		CreateTestStep(const TDesC& aStepName);
+	~CTestMessServer();
+	CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+protected:
+	CTestMessServer();
+	void	ConstructL(const TDesC& aName);
+
+private:
+
+private:
+	CTestMessSharedData*	iSharedData;
+};
+
+#endif /* __TEST_MESS_SERVER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessSession.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,35 @@
+// 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"
+// which accompanies 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 contains CTestMessSession
+// 
+//
+
+#if (!defined __TEST_MESS_SESSION_H__)
+#define __TEST_MESS_SESSION_H__
+
+#include <test/testexecuteserverutils.h>
+#include "TestMessSharedData.h"
+
+class CTestMessSession : public CTestSession
+{
+public:
+	CTestMessSession(CTestMessSharedData* aSharedData);
+	virtual void ServiceL(const RMessage2& aMessage);
+
+
+private:
+	CTestMessSharedData*	iSharedData;
+};
+
+#endif /* __TEST_MESS_SESSION_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessSetDefaultSc.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,33 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessSetDefaultSc.cpp
+// This contains TestMessSetDefaultSc which sets an SMS
+// SC as default SC.
+// 
+//
+
+#if (!defined __TEST_MESS_SET_DEFAULT_SC_H__)
+#define __TEST_MESS_SET_DEFAULT_SC_H__
+
+#include "TestMessBase.h"
+
+class CTestMessSetDefaultSc : public CTestMessBase
+{
+public:
+	CTestMessSetDefaultSc();
+
+	virtual	TVerdict	doTestStepL();
+};
+
+#endif /* __TEST_MESS_SET_DEFAULT_SC_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessSharedData.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,102 @@
+// 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"
+// which accompanies 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 contains CTestMessSharedData
+// 
+//
+
+#if (!defined __TEST_MESS_SHARED_DATA_H__)
+#define __TEST_MESS_SHARED_DATA_H__
+
+#include <msvapi.h>
+#include <mtclreg.h>
+#include <imapconnectionobserver.h>
+#include <test/testexecutestepbase.h>
+
+class  CTestMessSharedData : public CBase, private MMsvSessionObserver
+{
+public:
+	static CTestMessSharedData*	NewL();
+	~CTestMessSharedData();
+
+	void	IMAP4ConnectAndSyncCompleteAfterDisconnectL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep);
+	TInt	DeleteEntryL(CTestStep& aStep);
+
+	void	DoProcessL();
+
+protected:
+	CTestMessSharedData();
+
+private:
+	void	ConstructL();
+
+	//	MMsvSessionObserver implementation
+	virtual void HandleSessionEventL(TMsvSessionEvent, TAny*, TAny*, TAny*) {}
+
+private:
+	class CMsgEntry : public CActive
+	{
+	public:
+		~CMsgEntry();
+
+		virtual void	DoCancel();
+		virtual void	RunL();
+		virtual void	DoProcessL(CClientMtmRegistry& aMtmRegistry) = 0;
+		virtual void	DoCancelProcessL() = 0;
+
+	protected:
+		CMsgEntry(CMsgEntry* aList);
+
+		void	ConstructL(CTestStep& aStep);
+
+	public:
+		TName		iName;
+		CMsgEntry*	iNext;
+		TBool		iReadyToBeDeleted;
+	};
+	class CMsgIMAP4ConnectAndSyncComplete : public CMsgEntry, public MMsvImapConnectionObserver
+	{
+	public:
+		static CMsgIMAP4ConnectAndSyncComplete* NewL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep, CMsgEntry* aList);
+		~CMsgIMAP4ConnectAndSyncComplete();
+
+		virtual void	RunL();
+		virtual void	DoProcessL(CClientMtmRegistry& aMtmRegistry);
+		virtual void	DoCancelProcessL();
+
+	protected:
+		CMsgIMAP4ConnectAndSyncComplete(TUid aMtmId, TMsvId aMsvId, CMsgEntry* aList);
+
+	private:		
+		//	MMsvImapConnectionObserver implementation
+		void	HandleImapConnectionEvent(TImapConnectionEvent aConnectionEvent);
+
+	private:
+		TUid			iMtmId;
+		TMsvId			iMsvId;
+		CBaseMtm*		iBaseMtm;
+		CMsvOperation*	iOperation;
+		
+	};
+
+public:
+	CMsvSession*		iSession;
+	CClientMtmRegistry*	iMtmRegistry;
+	CMsgEntry*			iList;
+
+private:
+	CMsgEntry*			iAnyPostStepToDo;
+	TBool				iDeleteTestStep;
+};
+
+#endif /* __TEST_MESS_SHARED_DATA_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessStoreProcessUtil.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,81 @@
+/**
+* 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"
+* which accompanies 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 contains CTestMessStoreProcessUtil. Base class process what is in the message store
+* 
+*
+*/
+
+
+
+/**
+ @file TestMessStoreProcessUtil.h
+*/
+
+#if (!defined __TEST_MESS_STORE_PROCESS_UTIL_H__)
+#define __TEST_MESS_STORE_PROCESS_UTIL_H__
+
+#include "TestMessBase.h"
+
+class CTestMessStoreProcessUtil : public CBase
+{
+public:
+	CTestMessStoreProcessUtil(CTestMessBase& aTestStep, TBool aReadOnly);
+
+	//
+	TInt	ProcessEntryL(TMsvId aMsvId);
+
+protected:
+	// Process the CImHeader information
+	virtual void	ProcessImHeaderL(CImHeader& aHeader) = 0;
+
+	// Process the CImMimeHeader information
+	virtual void	ProcessImMimeHeaderL(CImMimeHeader& aHeader) = 0;
+
+	// Process the CImIAPPreferences information
+	virtual void	ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences) = 0;
+
+	// Process the CSmsHeader information
+	virtual void	ProcessSmsHeaderStreamL(CSmsHeader& aHeader) = 0;
+
+
+	// Process the CRichText information
+	virtual void	ProcessRichTextBodyL(CRichText& aBodyText) = 0;
+
+	// Convert Text to character set information
+	TBool			ValidCharacterSetInfo(const TPtrC& aCharacterSetType, TUint &aCharSetVal);
+
+private:
+	// Process the CImHeader information
+	void	ProcessImHeaderL(CMsvStore& aStore);
+
+	// Process the CImMimeHeader information
+	void	ProcessImMimeHeaderL(CMsvStore& aStore);
+
+
+	// Process the CSmsHeader information
+	void	ProcessSmsHeaderStreamL(CMsvStore& aStore);
+
+
+	// Process the CRichText information
+	void	ProcessRichTextBodyL(CMsvStore& aStore);
+
+protected:
+	CTestMessBase&	iTestStep;
+
+private:
+	TBool			iReadOnly;
+};
+
+#endif /* __TEST_MESS_STORE_PROCESS_UTIL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessTimer.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,44 @@
+// 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"
+// which accompanies 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 contains CTestMessTimer
+// 
+//
+
+#if (!defined __TEST_MESS_TIMER_H_)
+#define __TEST_MESS_TIMER_H_
+
+#include <e32base.h>
+
+class CTestMessProcessor;
+
+class CTestMessTimer : public CTimer  
+{
+public:
+	virtual ~CTestMessTimer();
+	static CTestMessTimer*	NewL(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor);
+
+	void	RunL();
+
+	void	IssueRequest();
+
+protected:
+	CTestMessTimer(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor);
+	void	ConstructL();
+
+private:
+	TTimeIntervalMicroSeconds32	iInterval;
+	CTestMessProcessor&			iProcessor;
+};
+
+#endif /* __TEST_MESS_TIMER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Inc/TestMessWatcher.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,45 @@
+// 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"
+// which accompanies 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 contains CTestMessWatcher which starts the message watchers
+// 
+//
+
+#if (!defined __TEST_MESS_WATCHER_H__)
+#define __TEST_MESS_WATCHER_H__
+
+#include <e32base.h>
+#include <watcher.h>
+
+const TInt	KTestUtilsWatcherStarterMin = 5000000;
+
+class CTestMessWatcher : public CActive
+{
+public:
+	static CTestMessWatcher* NewL(TInt aPriority = EPriorityStandard);
+	~CTestMessWatcher();
+
+private:
+	CTestMessWatcher(TInt aPriority);
+	void	RunL();
+	void	DoCancel();
+	void	ConstructL();
+
+private:
+	RTimer						iTimer;
+	RProcess					iWatcher;
+	TBool						iConstructed;
+	TTimeIntervalMicroSeconds32	iTimeLeft;
+};
+
+#endif /* __TEST_MESS_WATCHER_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Scripts/Smoketest_CreateSmsAccount.script	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,20 @@
+//
+// 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 Create SMS account with vodaphone service centre
+//
+LOAD_SUITE Smoketest_Mess_Server
+RUN_TEST_STEP	10000	Smoketest_Mess_Server CreateSmsAccount		c:\smoketest\smoketest_mess.ini	27029_SmsVodafoneAccount
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Scripts/Smoketest_Mess.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+//
+
+PRINT Run Mesaging smoketest
+//
+RUN_WS_PROGRAM 10 z:\sys\bin\mcentre.exe
+//
+DELAY 1500
+//
+LOAD_SUITE Smoketest_Mess_Server
+// Wait for watchers to start
+DELAY 1000
+//
+RUN_TEST_STEP	10000	Smoketest_Mess_Server CleanMessageFolder		c:\smoketest\Smoketest_mess.ini	27595_SmsCount01
+DELAY 500
+RUN_SCRIPT	c:\smoketest\Smoketest_CreateSmsAccount.script
+RUN_TEST_STEP	10000	Smoketest_Mess_Server SetSmsSc				c:\smoketest\Smoketest_mess.ini	27029_SmsVodafoneAccount
+DELAY 500
+RUN_TEST_STEP	10000	Smoketest_Mess_Server CreateSms				c:\smoketest\Smoketest_mess.ini	27584_SmsMessage01
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Scripts/setup_Smoketest_Mess.script	Wed Sep 01 12:30:50 2010 +0100
@@ -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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: 
+//
+
+RUN_UTILS MkDir c:\smoketest\
+RUN_UTILS MkDir c:\smoketest\sms\
+
+RUN_UTILS CopyFile z:\smoketest\smoketest_mess.ini	c:\smoketest\smoketest_mess.ini
+RUN_UTILS MakeReadWrite c:\smoketest\smoketest_mess.ini
+RUN_UTILS CopyFile z:\smoketest\sms\message1.txt	c:\smoketest\sms\message1.txt
+RUN_UTILS MakeReadWrite c:\smoketest\sms\message1.txt
+RUN_UTILS CopyFile z:\smoketest\smoketest_createsmsaccount.script	c:\smoketest\smoketest_createsmsaccount.script
+RUN_UTILS MakeReadWrite c:\smoketest\smoketest_createsmsaccount.script
+
+// RUN_SCRIPT c:\Smoketest\Smoketest_Mess.script
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1519 @@
+// 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"
+// which accompanies 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 contains CTestCase which is the base class for all the TestCase DLLs
+// 
+//
+
+#include "Configuration.cfg"
+
+#include "TestMessBase.h"
+#include "TestMessProcessor.h"
+#include "TestMessTimer.h"
+#include "TestMessPrintEntryUtil.h"
+
+// EPOC includes
+#include <smtpset.h>
+#include <pop3set.h>
+#include <imapset.h>
+#include <txtrich.h>
+#include <f32file.h>
+#include <msvids.h>
+#include <fbs.h>
+#include <emsuserpromptie.h>
+#ifdef __MESSAGING_API_V2__
+#include <smut.h>
+#include <miutset.h>
+#include <cemailaccounts.h>
+#include <csmsaccount.h>
+#endif
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+_LIT(KDepth,					"depth");
+_LIT(KFolder,					"folder%d");
+
+// Default value for depth of the count
+#define KDefaultDepthCount		1
+
+// Default value for depth of the count
+#define KDefaultDepthCount		1
+
+_LIT(KDefault,					"default");
+
+_LIT(KScheduled,				"scheduled");
+_LIT(KProgress,					"progress");
+
+//_LIT(KIap,						"iap");
+//_LIT(KIapName,					"iapname");
+
+_LIT(KElements,					"elements");
+_LIT(KStartPosition,			"StartPosition%d");
+_LIT(KFile,						"File%d");
+_LIT(KType,						"Type%d");
+_LIT(KTypeFormat,				"Format");
+_LIT(KTypeSound,				"Sound");
+_LIT(KTypePreDefSound,			"PreDefSound");
+_LIT(KTypeAnimation,			"Animation");
+_LIT(KTypePreDefAnimation,		"PreDefAnimation");
+_LIT(KTypePicture,				"Picture");
+_LIT(KTypeUserPrompt,			"UserPrompt");
+_LIT(KFormatLength,				"FormatLength%d");
+_LIT(KBold,						"Bold%d");
+_LIT(KItalic,					"Italic%d");
+_LIT(KUnderline,				"Underline%d");
+_LIT(KStrikethrough,			"Strikethrough%d");
+_LIT(KAlignment,				"Alignment%d");
+_LIT(KFontSize,					"FontSize%d");
+
+_LIT(KLeftAlign,				"LeftAlign");
+_LIT(KRightAlign,				"RightAlign");
+_LIT(KCenterAlign,				"CenterAlign");
+_LIT(KLangDepend,				"LangDepend");
+
+_LIT(KNormal,					"Normal");
+_LIT(KLarge,					"Large");
+_LIT(KSmall,					"Small");
+_LIT(KVariable,					"Variable");
+_LIT(KReserved,					"Reserved");
+
+_LIT(KEmsPreDef,				"emspredef%d");
+
+_LIT(KEmsAnimTypeFlirty,		"a0");
+_LIT(KEmsAnimTypeGlad,			"a1");
+_LIT(KEmsAnimTypeSceptic,		"a2");
+_LIT(KEmsAnimTypeSad,			"a3");
+_LIT(KEmsAnimTypeWow,			"a4");
+_LIT(KEmsAnimTypeCrying,		"a5");
+_LIT(KEmsAnimTypeWinking,		"a6");
+_LIT(KEmsAnimTypeLaughing,		"a7");
+_LIT(KEmsAnimTypeIndifferent,	"a8");
+_LIT(KEmsAnimTypeKissing,		"a9");
+_LIT(KEmsAnimTypeConfused,		"a10");
+_LIT(KEmsAnimTypeTongueOut,		"a11");
+_LIT(KEmsAnimTypeAngry,			"a12");
+_LIT(KEmsAnimTypeGlasses,		"a13");
+_LIT(KEmsAnimTypeDevil,			"a14");
+
+_LIT(KEmsSoundTypeChimesHigh,	"s0");
+_LIT(KEmsSoundTypeChimesLow,	"s1");
+_LIT(KEmsSoundTypeDing,			"s2");
+_LIT(KEmsSoundTypeTaDa,			"s3");
+_LIT(KEmsSoundTypeNotify,		"s4");
+_LIT(KEmsSoundTypeDrum,			"s5");
+_LIT(KEmsSoundTypeClaps,		"s6");
+_LIT(KEmsSoundTypeFanFar,		"s7");
+_LIT(KEmsSoundTypeChordHigh,	"s8");
+_LIT(KEmsSoundTypeChordLow,		"s9");
+
+/*
+_LIT(KBioIAP,					"IAP");
+_LIT(KBioEmailNotification,		"EmailNotification");
+_LIT(KBioBusinessCard,			"BusinessCard");
+_LIT(KBioWAPAccessPoint,		"WAPAccessPoint");
+_LIT(KBioVCalendar,				"VCalendar");
+_LIT(KBioVCard,					"VCard");
+_LIT(KBioRingingTones,			"RingingTones");
+_LIT(KBioOperatorLogo,			"OperatorLogo");
+_LIT(KBioWPRV,					"WPRV");
+_LIT(KBioCLILogo,				"CLILogo");
+*/
+_LIT(KObjectSize,				"ObjectSize%d");
+_LIT(KBody,						"body");
+/*@}*/
+
+const TInt KSmallObject		= 0;
+const TInt KLargeObject		= 1;
+const TInt KVariableObject	= 2;
+
+const TInt KDefaultStartPos	= 1;
+
+/**
+ * Constructor.
+ * @return - None
+ * 
+*/	
+CTestMessBase::CTestMessBase(TBool aSetDirectory)
+:	CTestStepSmokeTest()
+,	iSession(NULL)
+,	iMessageProcessor(NULL)
+,   iParaFormatLayer(NULL)
+,   iCharFormatLayer(NULL)
+,   iBodyText(NULL)
+,	iBodyAvailable(EFalse)
+,	iSetDirectory(aSetDirectory)
+,	iMessageTimer(NULL)
+,	iSchedular(NULL)
+,	iEntry(NULL)
+,	iOrder(KMsvGroupByType|KMsvGroupByStandardFolders, EMsvSortById, ETrue)
+	{
+	}
+
+CTestMessBase::~CTestMessBase()
+	{
+	delete iEntry;
+	iEntry=NULL;
+	delete iMessageTimer;
+	iMessageTimer=NULL;
+	delete iMessageProcessor;
+	iMessageProcessor=NULL;
+	delete iSession;
+	iSession=NULL;
+	delete iSchedular;
+	iSchedular=NULL;
+	delete iBodyText;
+	iBodyText=NULL;
+	delete iCharFormatLayer;
+	iCharFormatLayer=NULL;
+	delete iParaFormatLayer;
+	iParaFormatLayer=NULL;
+	}
+
+enum TVerdict CTestMessBase::doTestStepPreambleL()
+	{
+	TVerdict	ret=CTestStepSmokeTest::doTestStepPreambleL();
+
+	// Printing to the console and log file
+	const TDesC&	stepName=TestStepName();
+	INFO_PRINTF2(_L("%S"), &stepName);
+
+	iSchedular=new (ELeave) CActiveScheduler();
+	CActiveScheduler::Install(iSchedular);
+	iSession=CMsvSession::OpenSyncL(*this);
+
+	//	Get progress
+	TInt	progress=0;
+	TBool	hasProgress=GetIntFromConfig(ConfigSection(), KProgress, progress);
+	if ( !hasProgress )
+		{
+		hasProgress=GetIntFromConfig(KDefault, KProgress, progress);
+		}
+
+	iMessageProcessor=CTestMessProcessor::NewL(*this, *iSession);
+	if ( hasProgress )
+		{
+		iMessageTimer=CTestMessTimer::NewL(progress*KOneSecond, *iMessageProcessor);
+		}
+
+	if ( iSetDirectory )
+		{
+		TInt	depth=KDefaultDepthCount;
+		TBool	returnValue=GetIntFromConfig(ConfigSection(), KDepth, depth);
+		if ( !returnValue )
+			{
+			depth=KDefaultDepthCount;
+			}
+		INFO_PRINTF2(_L("Depth = %d"), depth);
+
+		//	Searce for the entry
+		TRAPD(error,SetEntryL(KMsvRootIndexEntryId));
+		if( error != KErrNone)
+			{
+			INFO_PRINTF2(_L("Set Entry failed, Error %D"),error);
+			SetTestStepError(error);
+			ret=EFail;
+			}
+		else
+			{
+
+			TBuf<KMaxTestExecuteCommandLength>	tempStore;
+			TBool								found=ETrue;
+			for (TInt entry=0; entry<depth && found;)
+				{
+				TPtrC	subject;
+				tempStore.Format(KFolder(), ++entry);
+				returnValue =GetStringFromConfig(ConfigSection(), tempStore, subject);
+				if ( !returnValue )
+					{
+					INFO_PRINTF1(_L("Null Folder"));
+					}
+				INFO_PRINTF2(_L("Folder = %S"), &subject);
+
+				CMsvEntrySelection*	selection=EntryL().ChildrenL();
+				CleanupStack::PushL(selection);
+				TInt				count=selection->Count();
+		
+				found=EFalse;
+				for (TInt i=count; i>0 && !found; )
+					{
+					TMsvId	childId=selection->At(--i);
+
+					SetEntryL(childId);
+					INFO_PRINTF2(_L("Entry Detail : %S"), &(EntryL().Entry().iDetails));
+					INFO_PRINTF2(_L("Entry Description: %S"), &(EntryL().Entry().iDescription));
+					if ( subject.Compare(EntryL().Entry().iDetails) == 0 ||
+						 subject.Compare(EntryL().Entry().iDescription) == 0 )
+						{
+						found=ETrue;
+						}
+					}
+				CleanupStack::PopAndDestroy(selection);
+				}
+
+			if ( !found )
+				{
+				ERR_PRINTF1(_L("Folder not found"));
+				ret=EFail;
+				}
+			}
+		}
+	if (TestStepResult() == EPass)
+		{
+		//Get body(file path) from ini file and read respective file. Store it into CRichText format.
+		iParaFormatLayer=CParaFormatLayer::NewL();
+		iCharFormatLayer=CCharFormatLayer::NewL(); 
+		iBodyText=CRichText::NewL(iParaFormatLayer, iCharFormatLayer);
+		iBodyAvailable=EFalse;
+	
+		TPtrC	body;
+		if(GetStringFromConfig(ConfigSection(), KBody, body))
+			{
+			INFO_PRINTF2(_L("Body = %S"), &body);
+			iBodyAvailable=ETrue;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("No Body"));
+			}
+
+		if ( iBodyAvailable )
+			{
+			// open the file
+			RFile	file;
+	
+			TInt anError = file.Open(iSession->FileSession(), body, EFileShareAny);
+			if(anError == KErrNone)
+				{
+				TBool		reading=ETrue;
+				TInt		pos=0;
+				TBuf8<1>	charIn;
+				while (reading)
+					{
+					file.Read(charIn, 1);
+					if(charIn.Length())
+						{
+						switch ( charIn[0] )
+							{
+						case '\r':
+							iBodyText->InsertL(pos++, CEditableText::ELineBreak);
+						case '\n':
+							break;
+						default:
+							iBodyText->InsertL(pos++, TChar(charIn[0]));
+							}
+						}
+					else
+						{
+						reading = EFalse;	// stop at the end of the file
+						}
+					}
+				iBodyAvailable=ETrue;
+				file.Close();
+				}
+			else
+			{
+			INFO_PRINTF2(_L("Cannot open file = %S"), &body);
+			iBodyAvailable=EFalse;
+			}
+		}//End of read file.
+	}
+
+	SetTestStepResult(ret);
+	return ret;
+	}
+
+enum TVerdict CTestMessBase::doTestStepPostambleL()
+	{
+	delete iEntry;
+	iEntry=NULL;
+	delete iMessageTimer;
+	iMessageTimer=NULL;
+	delete iMessageProcessor;
+	iMessageProcessor=NULL;
+	delete iSession;
+	iSession=NULL;
+	delete iSchedular;
+	iSchedular=NULL;
+	CActiveScheduler::Install(NULL);
+	return CTestStepSmokeTest::doTestStepPostambleL();
+	}
+
+void CTestMessBase::SetEntryL(TMsvId aId)
+	{
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession->GetEntryL(aId);
+	}
+
+CMsvEntry& CTestMessBase::EntryL()
+	{
+	if ( iEntry == NULL )
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	return *iEntry;
+	}
+
+
+HBufC8* CTestMessBase::CopyToBuf8LC(const TDesC& aDesC)
+//
+// @return - HBufC8*
+// Converts TDesC to HBufC8*.
+//
+	{
+	HBufC8*	itemBuff8 = HBufC8::NewLC(aDesC.Length());
+	itemBuff8->Des().Copy(aDesC);
+
+	return itemBuff8;
+	}
+
+HBufC* CTestMessBase::CopyToBufLC(const TDesC8& aDesC)
+//
+// @return - HBufC8*
+// Converts TDesC to HBufC8*.
+//
+	{
+	HBufC*	itemBuff = HBufC::NewLC(aDesC.Length());
+	itemBuff->Des().Copy(aDesC);
+
+	return itemBuff;
+	}
+
+
+#ifndef __MESSAGING_API_V2__
+void CTestMessBase::SetDefaultServiceL(TUid aMtm, TMsvId aService) const
+	{
+	// --- Now restore the default services from the root store ---
+	CMsvEntry*				rootEntry=iSession->GetEntryL(KMsvRootIndexEntryIdValue);
+	CleanupStack::PushL(rootEntry);
+	CMsvStore*				store = rootEntry->EditStoreL();
+	CleanupStack::PushL(store);
+	CMsvDefaultServices*	services = new(ELeave)CMsvDefaultServices;
+	CleanupStack::PushL(services);
+	services->RestoreL(*store);
+
+	// --- And now re-set the default service for the MTM to the one given ---
+	TMsvDefaultService	defaultService;
+	defaultService.iMtm=aMtm;
+	defaultService.iService=aService;
+	services->ChangeDefaultServiceL(defaultService);
+	services->StoreL(*store);
+	store->CommitL();
+	CleanupStack::PopAndDestroy(3, rootEntry);
+	}
+
+TInt CTestMessBase::DefaultServiceL(TUid aMtm, TMsvId& aService) const
+	{
+	// --- Now restore the default services from the root store ---
+	CMsvEntry*				rootEntry=iSession->GetEntryL(KMsvRootIndexEntryIdValue);
+	CleanupStack::PushL(rootEntry);
+	CMsvStore*				store=rootEntry->ReadStoreL();
+	CleanupStack::PushL(store);
+	CMsvDefaultServices*	services=new(ELeave)CMsvDefaultServices;
+	CleanupStack::PushL(services);
+	services->RestoreL(*store);
+
+	TInt					ret=services->DefaultService(aMtm, aService);
+
+	CleanupStack::PopAndDestroy(3, rootEntry);
+
+	return ret;
+	}
+#endif
+
+void CTestMessBase::PrintTreeL(TMsvId aRoot)
+	{
+	INFO_PRINTF1(_L("PrintTreeL In"));
+	CMsvEntry*			entry=iSession->GetEntryL(aRoot);
+	CleanupStack::PushL(entry);
+	entry->SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=entry->ChildrenL();
+	CleanupStack::PushL(selection);
+
+	PrintEntryL(*entry);
+	for (TInt i=0; i<selection->Count(); )
+		{
+		PrintTreeL(selection->At(i++));
+		}
+
+	CleanupStack::PopAndDestroy(2, entry);
+	INFO_PRINTF1(_L("PrintTreeL Out"));
+	}
+
+void CTestMessBase::PrintEntryL(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+
+	INFO_PRINTF2(_L("Entry Detail : %S"), &(entry.iDetails));
+	INFO_PRINTF2(_L("  Description: %S"), &(entry.iDescription));
+	INFO_PRINTF2(_L("  Id         : %x"), entry.Id());
+	INFO_PRINTF2(_L("  Parent Id  : %x"), entry.Parent());
+	INFO_PRINTF2(_L("  Service Id : %x"), entry.iServiceId);
+	if ( entry.iRelatedId != 0 )
+		{
+		INFO_PRINTF2(_L("  Related Id : %x"), entry.iRelatedId);
+		}
+	INFO_PRINTF2(_L("  Type       : %x"), entry.iType);
+	INFO_PRINTF2(_L("  Mtm        : %x"), entry.iMtm);
+
+
+	if ( entry.iSize != 0 )
+		{
+		INFO_PRINTF2(_L("  Size       : %x"), entry.iSize);
+		}
+	if ( entry.iError != 0 )
+		{
+		INFO_PRINTF2(_L("  Error      : %d"), entry.iError);
+		}
+	if ( entry.iBioType != 0 )
+		{
+		INFO_PRINTF2(_L("  BioType    : %x"), entry.iBioType);
+		}
+	if ( entry.MtmData1() != 0 )
+		{
+		INFO_PRINTF2(_L("  MtmData1   : %x"), entry.MtmData1());
+		}
+	if ( entry.MtmData2() != 0 )
+		{
+		INFO_PRINTF2(_L("  MtmData2   : %x"), entry.MtmData2());
+		}
+	if ( entry.MtmData3() != 0 )
+		{
+		INFO_PRINTF2(_L("  MtmData3   : %x"), entry.MtmData3());
+		}
+	if ( entry.Attachment() != 0 )
+		{
+		INFO_PRINTF2(_L("  Attachment : %x"), entry.Attachment());
+		}
+	if ( entry.Complete() != 0 )
+		{
+		INFO_PRINTF2(_L("  Complete   : %x"), entry.Complete());
+		}
+	if ( entry.Connected() != 0 )
+		{
+		INFO_PRINTF2(_L("  Connected  : %x"), entry.Connected());
+		}
+	if ( entry.Deleted() != 0 )
+		{
+		INFO_PRINTF2(_L("  Deleted    : %x"), entry.Deleted());
+		}
+	if ( entry.Failed() != 0 )
+		{
+		INFO_PRINTF2(_L("  Failed     : %x"), entry.Failed());
+		}
+	if ( entry.InPreparation() != 0 )
+		{
+		INFO_PRINTF2(_L("  InPrep     : %x"), entry.InPreparation());
+		}
+	if ( entry.MultipleRecipients() != 0 )
+		{
+		INFO_PRINTF2(_L("  MultiRecip : %x"), entry.MultipleRecipients());
+		}
+	if ( entry.OffPeak() != 0 )
+		{
+		INFO_PRINTF2(_L("  OffPeak    : %x"), entry.OffPeak());
+		}
+	if ( entry.Operation() != 0 )
+		{
+		INFO_PRINTF2(_L("  Operation  : %x"), entry.Operation());
+		}
+	if ( entry.Owner() != 0 )
+		{
+		INFO_PRINTF2(_L("  Owner      : %x"), entry.Owner());
+		}
+	if ( entry.PcSyncCount() != 0 )
+		{
+		INFO_PRINTF2(_L("  PcSyncCount: %x"), entry.PcSyncCount());
+		}
+	if ( entry.Priority() != 0 )
+		{
+		INFO_PRINTF2(_L("  Priority   : %x"), entry.Priority());
+		}
+	if ( entry.ReadOnly() != 0 )
+		{
+		INFO_PRINTF2(_L("  ReadOnly   : %x"), entry.ReadOnly());
+		}
+	if ( entry.Scheduled() != 0 )
+		{
+		INFO_PRINTF2(_L("  Scheduled  : %x"), entry.Scheduled());
+		}
+	if ( entry.SendingState() != 0 )
+		{
+		INFO_PRINTF2(_L("  Send State : %x"), entry.SendingState());
+		}
+	if ( entry.StandardFolder() != 0 )
+		{
+		INFO_PRINTF2(_L("  StdFolder  : %x"), entry.StandardFolder());
+		}
+	if ( entry.Unread() != 0 )
+		{
+		INFO_PRINTF2(_L("  Unread     : %x"), entry.Unread());
+		}
+	if ( entry.Visible() != 0 )
+		{
+		INFO_PRINTF2(_L("  Visible    : %x"), entry.Visible());
+		}
+
+#if (!defined CDMA_API_ENABLED)
+	if ( aEntry.HasStoreL() )
+		{
+		PrintStoreL(aEntry);
+		}
+#endif
+	}
+
+void CTestMessBase::PrintStoreL(CMsvEntry& aEntry)
+	{
+	TMsvEntry					entry=aEntry.Entry();
+	CTestMessPrintEntryUtil*	printUtil=new (ELeave) CTestMessPrintEntryUtil(*this);
+	CleanupStack::PushL(printUtil);
+
+	printUtil->ProcessEntryL(entry.Id());
+	CleanupStack::PopAndDestroy(printUtil);
+
+	if ( entry.iMtm==KUidMsgTypeSMTP )
+		{
+		PrintStoreSmtpL(aEntry);
+		}
+	else if ( entry.iMtm == KUidMsgTypePOP3 )
+		{
+		PrintStorePop3L(aEntry);
+		}
+	else if ( entry.iMtm == KUidMsgTypeIMAP4 )
+		{
+		PrintStoreImap4L(aEntry);
+		}
+	else if ( entry.iMtm == KUidMsgTypeSMS )
+		{
+		PrintStoreSmsL(aEntry);
+		}
+	}
+
+void CTestMessBase::PrintStoreSmtpL(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CImSmtpSettings*	settings = new(ELeave) CImSmtpSettings();
+		CleanupStack::PushL(settings);
+#ifdef __MESSAGING_API_V2__
+		CEmailAccounts*		accounts = CEmailAccounts::NewLC();
+		TSmtpAccount smtpAccountId;
+		accounts->GetSmtpAccountL(aEntry.EntryId(), smtpAccountId);
+		TRAPD(err, accounts->LoadSmtpSettingsL(smtpAccountId, *settings));
+		CleanupStack::PopAndDestroy(accounts);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			ptrTemp.Set(settings->ServerAddress());
+			INFO_PRINTF2(_L("  ServerAddress                : %S"), &ptrTemp);
+#ifndef __MESSAGING_API_V2__
+			ptrTemp.Set(settings->UserAddress());
+			INFO_PRINTF2(_L("  UserAddress                  : %S"), &ptrTemp);
+			INFO_PRINTF2(_L("  Version                      : %x"), (TUint)settings->Version());
+#endif
+			INFO_PRINTF2(_L("  Port                         : %x"), settings->Port());
+			INFO_PRINTF2(_L("  SecureSockets                : %x"), (TUint)settings->SecureSockets());
+			ptrTemp.Set(settings->EmailAlias());
+			INFO_PRINTF2(_L("  EmailAlias                   : %S"), &ptrTemp);
+			ptrTemp.Set(settings->EmailAddress());
+			INFO_PRINTF2(_L("  EmailAddress                 : %S"), &ptrTemp);
+			ptrTemp.Set(settings->ReplyToAddress());
+			INFO_PRINTF2(_L("  ReplyToAddress               : %S"), &ptrTemp);
+			ptrTemp.Set(settings->ReceiptAddress());
+			INFO_PRINTF2(_L("  ReceiptAddress               : %S"), &ptrTemp);
+			if ( settings->RequestReceipts() != 0 )
+				{
+				INFO_PRINTF2(_L("  RequestReceipts              : %x"), (TUint)settings->RequestReceipts());
+				}
+			if ( settings->SendCopyToSelf() != 0 )
+				{
+				INFO_PRINTF2(_L("  SendCopyToSelf               : %x"), (TUint)settings->SendCopyToSelf());
+				}
+			INFO_PRINTF2(_L("  SendMessageOption            : %x"), (TUint)settings->SendMessageOption());
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::PrintStorePop3L(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CImPop3Settings*	settings = new(ELeave) CImPop3Settings();
+		CleanupStack::PushL(settings);
+
+#ifdef __MESSAGING_API_V2__
+		CEmailAccounts*		accounts = CEmailAccounts::NewLC();
+		TPopAccount popAccountId;
+		accounts->GetPopAccountL(aEntry.EntryId(), popAccountId);
+		TRAPD(err, accounts->LoadPopSettingsL(popAccountId, *settings));
+		CleanupStack::PopAndDestroy(accounts);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			ptrTemp.Set(settings->ServerAddress());
+			INFO_PRINTF2(_L("  ServerAddress                : %S"), &ptrTemp);
+#ifndef __MESSAGING_API_V2__
+			ptrTemp.Set(settings->UserAddress());
+			INFO_PRINTF2(_L("  UserAddress                  : %S"), &ptrTemp);
+			INFO_PRINTF2(_L("  Version                      : %x"), (TUint)settings->Version());
+#endif
+			INFO_PRINTF2(_L("  Port                         : %x"), settings->Port());
+			INFO_PRINTF2(_L("  SecureSockets                : %x"), (TUint)settings->SecureSockets());
+			HBufC*	loginName=CopyToBufLC(settings->LoginName());
+			INFO_PRINTF2(_L("  LoginName                    : %S"), loginName);
+			CleanupStack::PopAndDestroy(loginName);
+			if ( settings->AutoSendOnConnect() != 0 )
+				{
+				INFO_PRINTF2(_L("  AutoSendOnConnect            : %x"), (TUint)settings->AutoSendOnConnect());
+				}
+			if ( settings->Apop() != 0 )
+				{
+				INFO_PRINTF2(_L("  Apop                         : %x"), (TUint)settings->Apop());
+				}
+			if ( settings->DisconnectedUserMode() != 0 )
+				{
+				INFO_PRINTF2(_L("  DisconnectedUserMode         : %x"), (TUint)settings->DisconnectedUserMode());
+				}
+			if ( settings->DeleteEmailsWhenDisconnecting() != 0 )
+				{
+				INFO_PRINTF2(_L("  DeleteEmailsWhenDisconnecting: %x"), (TUint)settings->DeleteEmailsWhenDisconnecting());
+				}
+			if ( settings->AcknowledgeReceipts() != 0 )
+				{
+				INFO_PRINTF2(_L("  AcknowledgeReceipts          : %x"), (TUint)settings->AcknowledgeReceipts());
+				}
+			if ( settings->MaxEmailSize() != 0 )
+				{
+				INFO_PRINTF2(_L("  MaxEmailSize                 : %x"), (TUint)settings->MaxEmailSize());
+				}
+			if ( settings->GetMailOptions() != 0 )
+				{
+				INFO_PRINTF2(_L("  GetMailOptions               : %x"), (TUint)settings->GetMailOptions());
+				}
+			if ( settings->InboxSynchronisationLimit() != 0 )
+				{
+				INFO_PRINTF2(_L("  InboxSynchronisationLimit    : %x"), (TUint)settings->InboxSynchronisationLimit());
+				}
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::PrintStoreImap4L(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CImImap4Settings*	settings = new(ELeave) CImImap4Settings();
+		CleanupStack::PushL(settings);
+
+#ifdef __MESSAGING_API_V2__
+		CEmailAccounts*		accounts = CEmailAccounts::NewLC();
+		TImapAccount imapAccountId;
+		accounts->GetImapAccountL(aEntry.EntryId(), imapAccountId);
+		TRAPD(err, accounts->LoadImapSettingsL(imapAccountId, *settings));
+		CleanupStack::PopAndDestroy(accounts);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			ptrTemp.Set(settings->ServerAddress());
+			INFO_PRINTF2(_L("  ServerAddress                : %S"), &ptrTemp);
+#ifndef __MESSAGING_API_V2__
+			ptrTemp.Set(settings->UserAddress());
+			INFO_PRINTF2(_L("  UserAddress                  : %S"), &ptrTemp);
+			INFO_PRINTF2(_L("  Version                      : %x"), (TUint)settings->Version());
+#endif
+			INFO_PRINTF2(_L("  Port                         : %x"), settings->Port());
+			INFO_PRINTF2(_L("  SecureSockets                : %x"), (TUint)settings->SecureSockets());
+
+			HBufC*	loginName=CopyToBufLC(settings->LoginName());
+			INFO_PRINTF2(_L("  LoginName                    : %S"), loginName);
+			HBufC*	folderPath=CopyToBufLC(settings->FolderPath());
+			INFO_PRINTF2(_L("  FolderPath                   : %S"), folderPath);
+			CleanupStack::PopAndDestroy(2, loginName);
+			if ( settings->PathSeparator() != 0 )
+				{
+				INFO_PRINTF2(_L("  PathSeparator                : %c"), (TText)settings->PathSeparator());
+				}
+			if ( settings->DisconnectedUserMode() != 0 )
+				{
+				INFO_PRINTF2(_L("  DisconnectedUserMode         : %x"), (TUint)settings->DisconnectedUserMode());
+				}
+			if ( settings->Synchronise() != 0 )
+				{
+				INFO_PRINTF2(_L("  Synchronise                  : %x"), (TUint)settings->Synchronise());
+				}
+			if ( settings->Subscribe() != 0 )
+				{
+				INFO_PRINTF2(_L("  Subscribe                    : %x"), (TUint)settings->Subscribe());
+				}
+			if ( settings->AutoSendOnConnect() != 0 )
+				{
+				INFO_PRINTF2(_L("  AutoSendOnConnect            : %x"), (TUint)settings->AutoSendOnConnect());
+				}
+			if ( settings->MaxEmailSize() != 0 )
+				{
+				INFO_PRINTF2(_L("  MaxEmailSize                 : %x"), (TUint)settings->MaxEmailSize());
+				}
+			if ( settings->DeleteEmailsWhenDisconnecting() != 0 )
+				{
+				INFO_PRINTF2(_L("  DeleteEmailsWhenDisconnecting: %x"), (TUint)settings->DeleteEmailsWhenDisconnecting());
+				}
+			if ( settings->AcknowledgeReceipts() != 0 )
+				{
+				INFO_PRINTF2(_L("  AcknowledgeReceipts          : %x"), (TUint)settings->AcknowledgeReceipts());
+				}
+			if ( settings->GetMailOptions() != 0 )
+				{
+				INFO_PRINTF2(_L("  GetMailOptions               : %x"), (TUint)settings->GetMailOptions());
+				}
+			if ( settings->InboxSynchronisationLimit() != 0 )
+				{
+				INFO_PRINTF2(_L("  InboxSynchronisationLimit    : %x"), (TUint)settings->InboxSynchronisationLimit());
+				}
+			if ( settings->MailboxSynchronisationLimit() != 0 )
+				{
+				INFO_PRINTF2(_L("  MailboxSynchronisationLimit  : %x"), (TUint)settings->MailboxSynchronisationLimit());
+				}
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::PrintStoreSmsL(CMsvEntry& aEntry)
+	{
+	TMsvEntry	entry=aEntry.Entry();
+	CMsvStore*	store=aEntry.ReadStoreL();
+	CleanupStack::PushL(store);
+
+	TPtrC	ptrTemp;
+	if ( entry.iType == KUidMsvServiceEntry )
+		{
+		CSmsSettings*	settings = CSmsSettings::NewL();
+		CleanupStack::PushL(settings);
+
+#ifdef __MESSAGING_API_V2__
+		CSmsAccount*		smsAccount = CSmsAccount::NewLC();
+		TRAPD(err, smsAccount->LoadSettingsL(*settings));
+		CleanupStack::PopAndDestroy(smsAccount);
+#else
+		TRAPD(err, settings->RestoreL(*store));
+#endif
+		if ( err == KErrNone )
+			{
+			TSmsDelivery	delivery(settings->Delivery());
+			INFO_PRINTF2(_L("  Delivery                     : %d"), delivery);
+			CSmsSettings::TSmsReportHandling	reportHandling(settings->StatusReportHandling());
+			INFO_PRINTF2(_L("  StatusReportHandling         : %d"), reportHandling);
+			CSmsSettings::TSmsReportHandling	specialMsgHandling(settings->SpecialMessageHandling());
+			INFO_PRINTF2(_L("  SpecialMessageHandling       : %d"), specialMsgHandling);
+			INFO_PRINTF2(_L("  ReplyQuoted                  : %d"), settings->ReplyQuoted());
+#ifdef __MESSAGING_API_V2__
+			const TInt	numSCAddr = settings->ServiceCenterCount();
+#else
+			const TInt	numSCAddr = settings->NumSCAddresses();
+#endif
+			for( TInt index=0;index<numSCAddr;index++ )
+				{
+#ifdef __MESSAGING_API_V2__
+				CSmsServiceCenter&	scAddr = settings->GetServiceCenter(index);
+#else
+				CSmsNumber&			scAddr = settings->SCAddress(index);
+#endif
+				ptrTemp.Set(scAddr.Name());
+				INFO_PRINTF2(_L("  SC Name                      : %S"), &ptrTemp);
+				ptrTemp.Set(scAddr.Address());
+				INFO_PRINTF2(_L("  SC Address                   : %S"), &ptrTemp);
+				}
+			CSmsSettings::TSmsSettingsCommDbAction	commDbAction(settings->SmsBearerAction());
+			INFO_PRINTF2(_L("  SmsBearerAction              : %d"), commDbAction);
+
+			CSmsSettings::TMobileSmsBearer	smsBearer(settings->SmsBearer());
+			INFO_PRINTF2(_L("  SmsBearer                    : %d"), smsBearer);
+			}
+		CleanupStack::PopAndDestroy(settings);
+		}
+
+	CleanupStack::PopAndDestroy(store);
+	}
+
+void CTestMessBase::IssueTimerRequest()
+	{
+	if (iMessageTimer!= NULL)
+		{
+		iMessageTimer->IssueRequest();
+		}
+	}
+
+void CTestMessBase::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny*, TAny*)
+/**
+ Handler for the Session Event
+ @param aEvent - TMsvSessionEvent object
+ @param aArg1 - TAny object pointer, used to store the argument for the event
+ @leave - System wide error codes
+*/
+	{
+	TBool	printSelection=EFalse;
+
+	switch (aEvent)
+		{
+	case EMsvEntriesCreated:
+		INFO_PRINTF1(_L("EMsvEntriesCreated"));
+		printSelection=ETrue;
+		break;
+	case EMsvEntriesChanged:
+		INFO_PRINTF1(_L("EMsvEntriesChanged"));
+		printSelection=ETrue;
+		break;
+	case EMsvEntriesDeleted:
+		INFO_PRINTF1(_L("EMsvEntriesDeleted"));
+		break;
+	case EMsvEntriesMoved:
+		INFO_PRINTF1(_L("EMsvEntriesMoved"));
+		printSelection=ETrue;
+		break;
+	case EMsvMtmGroupInstalled:
+		INFO_PRINTF1(_L("EMsvMtmGroupInstalled"));
+		break;
+	case EMsvMtmGroupDeInstalled:
+		INFO_PRINTF1(_L("EMsvMtmGroupDeInstalled"));
+		break;
+	case EMsvGeneralError:
+		INFO_PRINTF1(_L("EMsvGeneralError"));
+		break;
+	case EMsvCloseSession:
+		INFO_PRINTF1(_L("EMsvCloseSession"));
+		break;
+	case EMsvServerReady:
+		INFO_PRINTF1(_L("EMsvServerReady"));
+		break;
+	case EMsvServerFailedToStart:
+		INFO_PRINTF1(_L("EMsvServerFailedToStart"));
+		break;
+	case EMsvCorruptedIndexRebuilt:
+		INFO_PRINTF1(_L("EMsvCorruptedIndexRebuilt"));
+		break;
+	case EMsvServerTerminated:
+		INFO_PRINTF1(_L("EMsvServerTerminated"));
+		break;
+	case EMsvMediaChanged:
+		INFO_PRINTF1(_L("EMsvMediaChanged"));
+		break;
+	case EMsvMediaUnavailable:
+		INFO_PRINTF1(_L("EMsvMediaUnavailable"));
+		break;
+	case EMsvMediaAvailable:
+		INFO_PRINTF1(_L("EMsvMediaAvailable"));
+		break;
+	case EMsvMediaIncorrect:
+		INFO_PRINTF1(_L("EMsvMediaIncorrect"));
+		break;
+	case EMsvCorruptedIndexRebuilding:
+		INFO_PRINTF1(_L("EMsvCorruptedIndexRebuilding"));
+		break;
+	default:
+		INFO_PRINTF2(_L("EMsv Unknown event:%d"), aEvent);
+		break;
+	}
+
+	if ( printSelection )
+		{
+		CMsvEntrySelection*	selection=STATIC_CAST(CMsvEntrySelection*, aArg1);
+		CMsvEntry*			entry=NULL;
+		for ( int i=0; i<selection->Count(); )
+			{
+			entry=iSession->GetEntryL(selection->At(i++));
+			CleanupStack::PushL(entry);
+			PrintEntryL(*entry);
+			CleanupStack::PopAndDestroy(entry);
+			}
+		}
+	}
+
+
+void CTestMessBase::PrepareSmsHeaderFromIniFileL(CSmsHeader& aSmsHeader)
+	{
+	// Starts the Bitmap server
+	FbsStartup();
+	// start the server
+	RFbsSession::Connect();
+
+	// Add the Fromating required for EMS if required
+	TInt	emsElements=0;
+	if ( !GetIntFromConfig(ConfigSection(), KElements, emsElements) )
+		{
+		ERR_PRINTF1(_L("Elements not set"));
+		SetTestStepResult(EFail);
+		}
+
+// Macro usage for CDMA mtm
+#if (defined CDMA_API_ENABLED)
+	TMsvMessageSms&	message=aSmsHeader.SmsMessage();
+#else
+	CSmsMessage&	message=aSmsHeader.Message(); 
+#endif
+
+	TBuf<KMaxTestExecuteCommandLength>	tempStore;
+	for ( TInt element=0; element<emsElements && TestStepResult()==EPass;)
+		{
+		++element;
+		INFO_PRINTF2(_L("==== PROCESSING ELEMENT %d ===="), element);
+		//	Start position
+		tempStore.Format(KStartPosition, element);
+		TInt	startPosition=KDefaultStartPos;
+		if ( GetIntFromConfig(ConfigSection(), tempStore, startPosition) )
+			{
+			INFO_PRINTF2(_L("Start position %d"), startPosition);
+			}
+
+		//	File
+		tempStore.Format(KFile, element);
+		TPtrC	file;
+		TParse	fileName;
+		TBool	hasFile=GetStringFromConfig(ConfigSection(), tempStore, file);
+		if ( hasFile )
+			{
+			INFO_PRINTF2(_L("File %S"), &file);
+			fileName.Set(file,NULL,NULL);
+			}
+
+		tempStore.Format(KType, element);
+		TPtrC	type;
+		if ( GetStringFromConfig(ConfigSection(), tempStore, type) )
+			{
+			if ( type.Compare(KTypeFormat) == 0 )
+				{
+				//	=== Process text formating Information Element ===
+				CEmsFormatIE*	newElement=CEmsFormatIE::NewL();
+				CleanupStack::PushL(newElement);
+				newElement->SetStartPosition(startPosition);
+
+				TInt			intTemp;
+				TBool			boolTemp;
+				TPtrC			alignment;
+				TPtrC			fontSize;
+
+				// Set the Format length and other information
+				tempStore.Format(KFormatLength, element);
+				if ( GetIntFromConfig(ConfigSection(), tempStore, intTemp) )
+					{
+					INFO_PRINTF2(_L("Format Length %d"), intTemp);
+					newElement->SetFormatLength(intTemp);
+					}
+				tempStore.Format(KBold, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Bold %d"), boolTemp);
+					newElement->SetBold(boolTemp);
+					}
+				tempStore.Format(KItalic, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Italic %d"), boolTemp);
+				    newElement->SetItalic(boolTemp);
+					}
+				tempStore.Format(KUnderline, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Underline %d"), boolTemp);
+					newElement->SetUnderline(boolTemp);
+					}
+				tempStore.Format(KStrikethrough, element);
+				if ( GetBoolFromConfig(ConfigSection(), tempStore, boolTemp) )
+					{
+					INFO_PRINTF2(_L("Strikethrough %d"), boolTemp);
+					newElement->SetStrikethrough(boolTemp);
+					}
+				tempStore.Format(KAlignment,element);
+				if(GetStringFromConfig(ConfigSection(),tempStore,alignment))
+					{
+					SetAlignmentFormat(*newElement, alignment);
+					}
+				
+				tempStore.Format(KFontSize,element);
+				if(GetStringFromConfig(ConfigSection(),tempStore,fontSize))
+					{
+					//
+					SetFontSizeFormat(*newElement, fontSize);
+					}
+			    message.AddEMSInformationElementL(*newElement); 
+				CleanupStack::PopAndDestroy(newElement);
+				}
+			else if ( type.Compare(KTypeSound) == 0 )
+				{
+				//	=== Process sound Information Element ===
+				if ( hasFile )
+					{
+					HBufC8*			buffFile=CopyToBuf8LC(fileName.FullName());
+					CEmsSoundIE*	newElement=CEmsSoundIE::NewL(buffFile->Des());
+					CleanupStack::PushL(newElement);
+					newElement->SetStartPosition(startPosition); 
+				    message.AddEMSInformationElementL(*newElement); 
+					CleanupStack::PopAndDestroy(2, buffFile);
+					}
+				else
+					{
+					ERR_PRINTF1(_L("No Sound file name"));
+					SetTestStepResult(EFail);
+					}
+				}
+			else if ( type.Compare(KTypePreDefSound) == 0 )
+				{
+				//	=== Process predefined sound Information Element ===
+				TPtrC	preDefSound;
+				tempStore.Format(KEmsPreDef, element);
+				if ( !GetStringFromConfig(ConfigSection(),tempStore, preDefSound))
+					{
+					ERR_PRINTF1(_L("Predefined sound not present"));
+					SetTestStepResult(EFail);
+					}
+				else
+					{
+					INFO_PRINTF2(_L("Predefined sound %S"), &preDefSound);
+					CEmsPreDefSoundIE*	newElement=NewPreDefSoundL(preDefSound);
+
+					if ( newElement != NULL )
+						{
+						//Assign the predef animation element to newElement
+						CleanupStack::PushL(newElement);
+						newElement->SetStartPosition(startPosition);
+					    message.AddEMSInformationElementL(*newElement); 
+						CleanupStack::PopAndDestroy(newElement);
+						}
+					else
+						{
+						ERR_PRINTF1(_L("Unable to create predefined sound"));
+						SetTestStepResult(EFail);
+						}
+					}
+				}
+			else if ( type.Compare(KTypeAnimation) == 0 )
+				{
+				//	=== Process animation Information Element ===
+				if ( hasFile )
+					{
+					TPtrC	objectSize;
+
+					tempStore.Format(KObjectSize, element);
+					if ( !GetStringFromConfig(ConfigSection(),tempStore,objectSize) )
+						{
+						ERR_PRINTF1(_L("No size provided"));
+						SetTestStepResult(EFail);
+						}
+					else
+						{
+						CFbsBitmap*	bmp=NewBitmapL(fileName, objectSize);
+						if ( bmp == NULL )
+							{
+							ERR_PRINTF1(_L("Failed to Load Animation File. Error %d"));
+							SetTestStepResult(EFail);
+							}
+						else
+							{
+							CleanupStack::PushL(bmp);
+							CEmsAnimationIE*	newElement=CEmsAnimationIE::NewL(*bmp);
+							CleanupStack::PushL(newElement);
+							newElement->SetStartPosition(startPosition);
+						    message.AddEMSInformationElementL(*newElement); 
+							CleanupStack::PopAndDestroy(2, bmp);
+							}
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("No Animation file name"));
+					SetTestStepResult(EFail);
+					}
+				}
+			else if ( type.Compare(KTypePreDefAnimation) == 0 )
+				{
+				//	=== Process predefined animation Information Element ===
+				TPtrC	preDefAnim;
+				tempStore.Format(KEmsPreDef, element);
+				if ( !GetStringFromConfig(ConfigSection(),tempStore, preDefAnim) )
+					{
+					ERR_PRINTF1(_L("Predefined animations not present"));
+					SetTestStepResult(EFail);
+					}
+				else
+					{
+					INFO_PRINTF2(_L("Predefined animation %S"), &preDefAnim);
+					CEmsPreDefAnimationIE*	newElement=NewPreDefAnimationL(preDefAnim);
+
+					if ( newElement != NULL )
+						{
+						//Assign the predef animation element to newElement
+						CleanupStack::PushL(newElement);
+						newElement->SetStartPosition(startPosition);
+					    message.AddEMSInformationElementL(*newElement); 
+						CleanupStack::PopAndDestroy(newElement);
+						}
+					else
+						{
+						ERR_PRINTF1(_L("Unable to create predefined animation"));
+						SetTestStepResult(EFail);
+						}
+					}
+				}
+			else if ( type.Compare(KTypePicture) == 0 )
+				{
+				//	=== Process picture Information Element ===
+				if ( hasFile )
+					{
+					TPtrC	objectSize;
+
+					tempStore.Format(KObjectSize, element);
+					if ( !GetStringFromConfig(ConfigSection(),tempStore,objectSize) )
+						{
+						ERR_PRINTF1(_L("No size provided"));
+						SetTestStepResult(EFail);
+						}
+					else
+						{
+						CFbsBitmap*	bmp=NewBitmapL(fileName, objectSize);
+						if ( bmp == NULL )
+							{
+							ERR_PRINTF1(_L("Failed to Load Animation File. Error %d"));
+							SetTestStepResult(EFail);
+							}
+						else
+							{
+							CleanupStack::PushL(bmp);
+							CEmsPictureIE*	newElement=CEmsPictureIE::NewL(*bmp);
+							CleanupStack::PushL(newElement);
+							newElement->SetStartPosition(startPosition);
+						    message.AddEMSInformationElementL(*newElement); 
+							CleanupStack::PopAndDestroy(2, bmp);
+							}
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("No Picture file name"));
+					SetTestStepResult(EFail);
+					}
+				}
+			else if ( type.Compare(KTypeUserPrompt) == 0 )
+				{
+				//	=== Process user prompt Information Element ===
+				CEmsUserPrompt*	newElement=CEmsUserPrompt::NewL(2);
+				CleanupStack::PushL(newElement);
+				newElement->SetStartPosition(startPosition);
+			    message.AddEMSInformationElementL(*newElement); 
+				CleanupStack::PopAndDestroy(newElement);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("Unknown element type %S"), &type);
+				SetTestStepResult(EFail);
+				}
+			}
+		else
+			{
+			ERR_PRINTF1(_L("No type given"));
+			SetTestStepResult(EFail);
+			}
+		}
+
+	RFbsSession::Disconnect(); 
+	}
+
+/**
+ This function reads the schedule time from ini file
+ @return - returns the schedule time read from the ini file
+*/
+TTimeIntervalMinutes CTestMessBase::ReadScheduleTime()
+	{
+	// Read  the schedule time from ini file. Add this schedule time to current time.
+	// This time will be set as the scheduled time for sending the SMS message from task scheduler
+	// By default schedule time will be 1 min
+	TInt	scheduled=0;
+	GetIntFromConfig(ConfigSection(), KScheduled, scheduled);
+	INFO_PRINTF2(_L("Scheduled Time in minutes is %d"), scheduled);
+	return TTimeIntervalMinutes(scheduled);
+	}
+
+void CTestMessBase::SetAlignmentFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aAlignment)
+	{
+	//Sets the alignment to the text
+	INFO_PRINTF2(_L("Alignment %S"), &aAlignment);
+	if( aAlignment.Compare(KLeftAlign)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ELeft);
+		}
+	else if( aAlignment.Compare(KRightAlign)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ERight);
+		}
+	else if( aAlignment.Compare(KCenterAlign)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ECenter);
+		}
+	else if( aAlignment.Compare(KLangDepend)== 0 )
+		{
+		aEmsFormatIE.SetAlignment(CEmsFormatIE::ELangDepend);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Illegal alignment value"));
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CTestMessBase::SetFontSizeFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aFontSize)
+	{
+	//Sets the specified font to the text 
+	INFO_PRINTF2(_L("FontSize %S"), &aFontSize);
+	if( aFontSize.Compare(KNormal)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::ENormal);
+		}
+	else if( aFontSize.Compare(KLarge)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::ELarge);
+		}
+	else if( aFontSize.Compare(KSmall)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::ESmall);
+		}
+	else if( aFontSize.Compare(KReserved)== 0 )
+		{
+		aEmsFormatIE.SetFontSize(CEmsFormatIE::EReserved);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Illegal fonst size value"));
+		SetTestStepResult(EFail);
+		}
+	}
+
+CEmsPreDefAnimationIE* CTestMessBase::NewPreDefAnimationL(const TDesC& aPreDefType) 
+//
+// Attaches the required predef animation. 
+// Arguments - aString - holds the TAnim type to be attached 
+// Return Value - Returns a Pointer of CEmsPreDefAnimationIE 
+//
+	{
+	//Initialize emsPreDef to NULL
+	CEmsPreDefAnimationIE::TAnimType	animType=CEmsPreDefAnimationIE::EFlirty;
+	TBool								validType=ETrue;
+
+	//Set a value for emsPreDef 
+	if ( aPreDefType.Compare(KEmsAnimTypeFlirty) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EFlirty;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeGlad) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EGlad;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeSceptic) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ESceptic;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeSad) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ESad;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeWow) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EWow;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeCrying) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ECrying;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeWinking) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EWinking;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeLaughing) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ELaughing;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeIndifferent) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EIndifferent;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeKissing) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EKissing;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeConfused) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EConfused;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeTongueOut) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::ETongueOut;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeAngry) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EAngry;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeGlasses) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EGlasses;
+		}
+	else if ( aPreDefType.Compare(KEmsAnimTypeDevil) == 0 )
+		{
+		animType = CEmsPreDefAnimationIE::EDevil;
+		}
+	else
+		{
+		validType=EFalse;
+		}
+
+	CEmsPreDefAnimationIE*	emsPreDef=NULL;
+	if ( validType )
+		{
+		emsPreDef=CEmsPreDefAnimationIE::NewL(animType);
+		}
+
+	return emsPreDef;
+	}
+
+CEmsPreDefSoundIE* CTestMessBase::NewPreDefSoundL(const TDesC& aPreDefType) 
+//
+// Attaches the required predef animation. 
+// Arguments - aString - holds the TAnim type to be attached 
+// Return Value - Returns a Pointer of CEmsPreDefAnimationIE 
+//
+	{
+	//Initialize emsPreDef to NULL
+	CEmsPreDefSoundIE::TPredefinedSound	soundType=CEmsPreDefSoundIE::EChimesHigh;
+	TBool								validType=ETrue;
+
+	//Set a value for emsPreDef 
+	if ( aPreDefType.Compare(KEmsSoundTypeChimesHigh) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChimesHigh;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeChimesLow) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChimesLow;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeDing) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EDing;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeTaDa) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::ETaDa;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeNotify) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::ENotify;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeDrum) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EDrum;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeClaps) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EClaps;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeFanFar) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EFanFar;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeChordHigh) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChordHigh;
+		}
+	else if ( aPreDefType.Compare(KEmsSoundTypeChordLow) == 0 )
+		{
+		soundType = CEmsPreDefSoundIE::EChordLow;
+		}
+	else
+		{
+		validType=EFalse;
+		}
+
+	CEmsPreDefSoundIE*	emsPreDef=NULL;
+	if ( validType )
+		{
+		emsPreDef=CEmsPreDefSoundIE::NewL(soundType);
+		}
+
+	return emsPreDef;
+	}
+
+CFbsBitmap* CTestMessBase::NewBitmapL(const TParse& aFileName, const TDesC& aObjectSize)
+	{
+	TInt	bitmapType=KSmallObject;
+	TBool	validType=ETrue;
+	if( aObjectSize.Compare(KSmall) == 0 )
+		{
+		bitmapType=KSmallObject;
+		}
+	else if ( aObjectSize.Compare(KLarge) == 0 )
+		{
+		bitmapType=KLargeObject;
+		}
+	else if ( aObjectSize.Compare(KVariable) == 0 )
+		{
+		bitmapType=KVariableObject;
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Invalid bitmap type %S"), &aObjectSize);
+		validType=EFalse;
+		}
+
+	CFbsBitmap*	bmp = NULL;
+	if ( validType )
+		{
+		bmp = new (ELeave) CFbsBitmap();
+
+		TInt	error = bmp->Load(aFileName.FullName(), bitmapType, EFalse);
+		INFO_PRINTF2(_L("Bimap load %d"), error);
+		if ( error != KErrNone)
+			{
+			delete bmp;
+			bmp=NULL;
+			}
+		}
+
+	return bmp;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessCleanMessageFolder.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,172 @@
+// 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"
+// which accompanies 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 contains CTestMessCleanMessageFolder which cleans out all the
+// message folders
+// 
+//
+
+#include "TestMessCleanMessageFolder.h"
+
+// EPOC includes
+#include <msvids.h>
+#include <test/testexecuteclient.h>
+
+#ifdef __MESSAGING_API_V2__
+#include <cemailaccounts.h>
+#endif
+
+_LIT(KMessageCount, "messagecount");
+
+CTestMessCleanMessageFolder::CTestMessCleanMessageFolder()
+:	CTestMessBase(ETrue)
+,	iNumberOfMessagesToDelete(-1)		//	Negative value implies delete all
+	{
+	SetTestStepName(_L("CleanMessageFolder"));
+	}
+
+TVerdict CTestMessCleanMessageFolder::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Clean message folder"));
+
+	if ( GetIntFromConfig(ConfigSection(), KMessageCount, iNumberOfMessagesToDelete) )
+		{
+		INFO_PRINTF2(_L("Message count read from the ini file is  %D"), iNumberOfMessagesToDelete);
+		}
+	else
+		{
+		WARN_PRINTF1(_L("No Count specified in the ini file"));
+		WARN_PRINTF1(_L("All the messages will be deleted"));
+		}
+
+	if ( TestStepResult() == EPass )
+		{
+		//delete the contents of the folder
+		CleanFolders(EntryL().EntryId());
+
+		if ( iNumberOfMessagesToDelete<=0 )
+			{
+			INFO_PRINTF1(_L("Messages deleted"));
+			}
+		else
+			{
+			ERR_PRINTF2(_L("%d Outstanding entries not deleted."), iNumberOfMessagesToDelete);
+			SetTestStepResult(EFail);
+			}
+		}
+
+	return TestStepResult();
+	}
+
+void CTestMessCleanMessageFolder::CleanFolders(const TMsvId aEntryId)
+	{
+#ifdef __MESSAGING_API_V2__
+	if ( aEntryId == KMsvRootIndexEntryId )
+		{
+		CEmailAccounts*	accounts = CEmailAccounts::NewLC();
+
+		RArray<TPopAccount>	pop3Accounts;
+		CleanupClosePushL(pop3Accounts);
+		accounts->GetPopAccountsL(pop3Accounts);
+		TInt	count = pop3Accounts.Count();
+		TInt	index=0;
+		for( index = 0; index < count; index++ )
+			{
+			TPopAccount	id = pop3Accounts[index];
+			accounts->DeletePopAccountL( id );
+			}
+
+		RArray<TImapAccount>	imap4Accounts;
+		CleanupClosePushL(imap4Accounts);
+		accounts->GetImapAccountsL(imap4Accounts);
+		count = imap4Accounts.Count();
+		for( TInt index = 0; index < count; index++ )
+			{
+			TImapAccount	id = imap4Accounts[index];
+			accounts->DeleteImapAccountL( id );
+			}
+
+		CleanupStack::PopAndDestroy(3, accounts);
+		}
+#endif
+
+	SetEntryL(aEntryId);
+	EntryL().SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=EntryL().ChildrenL();
+	CleanupStack::PushL(selection);
+	TInt				count=selection->Count();
+	TInt				i;
+	for (i=count; i>0; )
+		{
+		TMsvId	childId=selection->At(--i);
+
+		SetEntryL(aEntryId);
+		if( iNumberOfMessagesToDelete!=0 )
+			{
+			TRAPD(err, EntryL().DeleteL(childId));
+			switch ( err )
+				{
+			case KErrNone:
+				INFO_PRINTF2(_L("DeletedId      : %x"), childId);
+				if ( iNumberOfMessagesToDelete > 0 )
+					{
+					--iNumberOfMessagesToDelete;
+					}
+				break;
+			case KErrAccessDenied:
+				INFO_PRINTF2(_L("Access Denied  : %x"), childId);
+				break;
+			default:
+				ERR_PRINTF3(_L("Deletion Error : %d , Id : %x "), err, childId);
+				SetTestStepResult(EFail);
+				break;
+				}
+			}
+		}
+	CleanupStack::PopAndDestroy(selection);
+
+	EntryL().SetSortTypeL(SelectionOrdering());
+	selection=EntryL().ChildrenL();
+	CleanupStack::PushL(selection);
+	count=selection->Count();
+	for (i=count; i>0; )
+		{
+		TMsvId	childId=selection->At(--i);
+
+		//	Log child
+		CleanFolders(childId);
+
+		SetEntryL(aEntryId);
+
+		TRAPD(err, EntryL().DeleteL(childId));
+		switch ( err )
+			{
+		case KErrNone:
+			INFO_PRINTF2(_L("DeletedId      : %x"), childId);
+			if ( iNumberOfMessagesToDelete > 0 )
+				{
+				--iNumberOfMessagesToDelete;
+				}
+			break;
+		case KErrAccessDenied:
+			INFO_PRINTF2(_L("Access Denied  : %x"), childId);
+			break;
+		default:
+			ERR_PRINTF3(_L("Deletion Error : %d , Id : %x "), err, childId);
+			SetTestStepResult(EFail);
+			break;
+			}
+		}
+	CleanupStack::PopAndDestroy(selection);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessCreateCdmaSmsUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,433 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessCreateCdmsSmsUtil.cpp
+// This class creates the Cdma sms header and the service settings
+// 
+//
+
+#include "TestMessCreateCdmaSmsUtil.h"
+#include "TestMessCreateSmsAccount.h"
+
+// EPOC includes
+#include <csmsaccount.h>
+
+/*@{*/
+_LIT(KPtDeliveryAck,			"DeliveryAck");
+_LIT(KPtUserAck,				"UserAck");
+_LIT(KPtReadAck,				"ReadAck");
+_LIT(KPtMessageConversion,		"MessageConversion");
+_LIT(KPtPriorityIndicator,		"PriorityIndicator");
+_LIT(KPtPrivacyIndicator,		"PrivacyIndicator");
+_LIT(KPtReplyOption,			"ReplyOption");
+_LIT(KPtAlertonDelivery,		"AlertonDelivery");
+_LIT(KPtLanguageIndicator,		"LanguageIndicator");
+
+//Constants used
+_LIT(KPtTeleService,			"TeleService");
+_LIT(KPtSubmit,					"Submit");
+_LIT(KPtCancel,					"Cancel");
+
+// Supported Teleservices
+_LIT(KPtTeleWmt,				"WMT");
+_LIT(KPtTeleWemt,				"WEMT");
+_LIT(KPtTeleWpt,				"WPT");
+_LIT(KPtTeleVmn,				"VMN");
+_LIT(KPtTeleScpt,				"SCPT");
+_LIT(KPtTeleCatpt,				"CATPT");
+_LIT(KPtTeleCmt91,				"CMT91");
+_LIT(KPtTeleWap,				"WAP");
+
+// Supported message conversion formats
+_LIT(KPtPidFax,					"Fax");
+_LIT(KPtPidX400,				"X400");
+_LIT(KPtPidPaging,				"Paging");
+_LIT(KPtPidMail,				"Mail");
+_LIT(KPtPidErmes,				"Ermes");
+_LIT(KPtPidSpeech,				"Speech");
+/*@}*/
+
+/**
+ Constructor
+*/
+CTestMessCreateCdmaSmsUtil ::CTestMessCreateCdmaSmsUtil(CTestMessBase& aTestStep)
+: 	CTestMessCreateSmsUtilBase(aTestStep)
+	{
+	aTestStep.INFO_PRINTF1(_L("The CDMA SMS util is created"));
+	}
+
+/**
+ Prepares the SMS account details for CSendAs/RSendAs
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+void CTestMessCreateCdmaSmsUtil::PrepareAccountL(CMsvSession& /*aSession*/)
+	{
+	// Reads the teleservice
+	tia637::TTeleserviceId	teleServiceId=tia637::KTeleserviceWMT;
+	TPtrC 					ptrTeleService;
+	if( !(iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KPtTeleService, ptrTeleService)))
+		{
+		iTestStep.INFO_PRINTF1(_L("Teleservice is not provided. Default teleservice (WMT) is used"));
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF2(_L("Teleservice to be set is : %S"), &ptrTeleService);
+
+		//Get the teleservice Id
+		teleServiceId = GetTeleServiceId(ptrTeleService);
+		}
+
+	if ( teleServiceId!=tia637::KTeleserviceWEMT )
+		{
+		teleServiceId=tia637::KTeleserviceWMT;
+		}
+
+	CSmsSettings*	smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+
+	CSmsAccount*	smsAccount=CSmsAccount::NewLC();
+	smsAccount->LoadSettingsL(*smsSettings);
+	smsSettings->SetDefaultTeleservice(teleServiceId);
+	smsAccount->SaveSettingsL(*smsSettings);
+	CleanupStack::PopAndDestroy(smsAccount);
+	CleanupStack::PopAndDestroy(smsSettings);
+	}
+
+/**
+ Creates a new CDMA sms header object
+ @param aBodyText - body text of the message
+ @return CSmsHeader - pointer of the CSmsHeader object
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+CSmsHeader* CTestMessCreateCdmaSmsUtil::NewHeaderL(CRichText& aBodyText)
+	{
+	return CSmsHeader::NewL(KSmsTypeSubmit, aBodyText);
+	}
+
+/**
+ Fill up the header object with data read from the ini file
+ @param aSmsHeader - reference for the sms header object
+ @leave - System wide error codes
+*/
+void CTestMessCreateCdmaSmsUtil::PrepareHeaderL(CSmsHeader& aSmsHeader)
+	{
+	//	Get bearer data
+	TPtrC	ptrBearer;
+	TBool	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KBearer, ptrBearer);
+	if ( !returnValue )
+		{
+		//If no bearer provided, the bearer is read from the default section ofthe
+		// ini file
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefBearer, ptrBearer);
+		}
+
+	if ( returnValue )
+		{
+		//default value for the bearer
+		TBioMsgIdType	bearer = EBioMsgIdNbs;
+
+		iTestStep.INFO_PRINTF2(_L("Bearer = %S"), &ptrBearer);
+		if (ptrBearer.CompareF(KBearerWap) == 0)
+			{
+			//Wap message ID
+			bearer = EBioMsgIdWap;
+			}
+		else if (ptrBearer.CompareF(KBearerWapSecure) == 0)
+			{
+			//WapSecure message ID
+			bearer = EBioMsgIdWapSecure;
+			}
+		else
+			{
+			iTestStep.ERR_PRINTF1(_L("No bearer provided. Default is used"));
+			}
+
+		//Set the BIO Message ID type
+		aSmsHeader.BioMessage().SetBioMsgIdType(bearer);
+		}
+
+	//	Get encoding data
+	TInt	encoding;
+	returnValue=iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KEncoding, encoding);
+	if ( !returnValue )
+		{
+		//If no encoding is provided, the encoding is read from the default section 
+		//of the ini file
+		returnValue=iTestStep.GetIntFromConfig(KDef, KDefEncoding, encoding);
+		}
+	if ( returnValue )
+		{
+		//Default encoding value.
+		TSmsCharacterEncoding charEncoding = KSmsEncodingUnicode;
+
+		iTestStep.INFO_PRINTF2(_L("Encoding = %d"), encoding);
+		switch (encoding)
+			{
+		case 7:
+			//7 bit encoding format
+			charEncoding = KSmsEncoding7BitASCII;
+			break;
+		case 8:
+			//8 bit encoding format
+			charEncoding = KSmsEncodingBinary;
+			break;
+		case 16:
+			//unicode encoding format
+			charEncoding = KSmsEncodingUnicode;
+			break;
+		default:
+			//default encoding format
+			charEncoding = KSmsEncodingUnicode;
+			break;
+			}
+		//Set the character encoding format
+		aSmsHeader.BioMessage().SetEncoding(charEncoding);
+		}
+
+	
+	TBool	deliveryAck = EFalse;
+	TBool	userAck = EFalse;
+	TBool	readAck = EFalse;
+
+	//	Get acknowledgements report request
+	TPtrC	ptrDeliveryReport;
+	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KDeliveryReport, ptrDeliveryReport);
+	if ( !returnValue )
+		{
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefDeliveryReport, ptrDeliveryReport);
+		}
+	if ( returnValue )
+		{
+		iTestStep.INFO_PRINTF2(_L("The acknowledgement request flag : %S"), &ptrDeliveryReport);
+		if(ptrDeliveryReport.Compare(_L("NO")) == 0)
+			{
+			deliveryAck = EFalse;
+			userAck = EFalse;
+			readAck = EFalse;
+			}
+		if(ptrDeliveryReport.Compare(_L("YES")) == 0)
+			{
+			// Read different type of acknowledgements
+			iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtDeliveryAck, deliveryAck);
+			iTestStep.INFO_PRINTF2(_L("The Delivery acknowledgement request flag : %d"), deliveryAck);
+			iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtUserAck, userAck);
+			iTestStep.INFO_PRINTF2(_L("The User acknowledgement request flag : %d"), userAck);
+			iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtReadAck, readAck);
+			iTestStep.INFO_PRINTF2(_L("The Read acknowledgement request flag : %d"), readAck);
+			}
+		}
+	
+	aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeDelivery, deliveryAck);
+	aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeUser, userAck);
+	aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeRead, readAck);
+	
+	//Get the message conversion type
+	TPtrC	ptrMessageConversion;
+	TSmsPIDConversion smsPidConversion = ESmsConvPIDNone;
+	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KPtMessageConversion, ptrMessageConversion);
+	if ( !returnValue )
+		{
+		iTestStep.INFO_PRINTF1(_L("The message conversion is not provided. Default (PIDNone) is taken"));
+		}
+	if ( returnValue )
+		{
+		iTestStep.INFO_PRINTF2(_L("The message conversion to be set is  : %S"), &ptrMessageConversion);
+		//Get the Message conversion id
+		smsPidConversion = GetMessageConversionId(ptrMessageConversion);
+		}
+	//Set the message conversion.
+	CSmsSettings *smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	aSmsHeader.GetDefaultMessageSettingsL(*smsSettings);
+	smsSettings->SetMessageConversion(smsPidConversion);
+	CleanupStack::Pop(smsSettings);
+
+	// Set the other message settings
+	aSmsHeader.CdmaMessage().SetPrivacyIndicatorL(tia637::KBdRestricted);
+	aSmsHeader.CdmaMessage().SetPriorityIndicatorL(tia637::KBdUrgent);
+	aSmsHeader.CdmaMessage().SetAlertOnDeliveryL(tia637::KBdUseMediumPriorityAlert);
+	aSmsHeader.CdmaMessage().SetLanguageIndicatorL(tia637::KLanguageEnglish);
+	}
+
+/**
+ Sets the cdma sms service settings fields using data read from the
+ ini file. If no data is provided/read from ini file, the default 
+ account settings is used.
+ @param aSmsSettings - reference of the CSmsSettings
+*/
+void CTestMessCreateCdmaSmsUtil::SetSmsAccountSettings(CSmsSettings& aSmsSettings)
+	{
+	iTestStep.INFO_PRINTF1(_L("Set SMS account Settings...."));
+	TBool	boolTemp;
+	
+	//	Set the Reply quoted setting.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KReplyQuoted, boolTemp) )
+		{
+		aSmsSettings.SetReplyQuoted(boolTemp);
+		}
+
+	// Set the priority indicator
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtPriorityIndicator, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTPriorityIndicator, boolTemp);
+		}
+
+	//Set the Privacy Indicator	
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtPrivacyIndicator, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTPrivacyIndicator, boolTemp);
+		}
+
+	//Set the Reply option
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtReplyOption, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTReplyOption, boolTemp);
+		}
+
+	//Set the alert on Message deliver
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtAlertonDelivery, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTAlertOnMessageDelivery, boolTemp);
+		}
+
+	//Set the Language Indicator
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KPtLanguageIndicator, boolTemp) )
+		{
+		aSmsSettings.MessageSettings().Cdma().ActivateMessageSetting(tia637::KTLanguageIndicator, boolTemp);
+		}
+
+	aSmsSettings.SetValidityPeriod(ESmsVPWeek);	// week 
+	aSmsSettings.SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger); //relative
+	aSmsSettings.SetDelivery(ESmsDeliveryImmediately);
+	}
+
+/**
+ Get the message type id
+ @param aMessageType - TPtrC object holding the message type
+ @return TSmsMessageType - message type id
+*/
+TSmsMessageType CTestMessCreateCdmaSmsUtil::GetMessageTypeId(const TDesC& aMessageType)
+	{
+	//Default message type is assigned
+	TSmsMessageType smsMessageType = KSmsTypeSubmit;
+
+	if( aMessageType.Compare(KPtSubmit) ==0)
+		{
+		smsMessageType = KSmsTypeSubmit;
+		}
+	else if( aMessageType.Compare(KPtCancel) ==0)
+		{
+		smsMessageType = KSmsTypeCdmaCancellation;
+		}
+	else
+		{
+		iTestStep.WARN_PRINTF1(_L("Invalid message type provided. Default is used"));
+		}
+	return smsMessageType;
+	}
+	
+/**
+ Gets the Teleservice Id
+ @param aTeleService - TPtrC holding the tele service name
+ @return tia637::TTeleserviceId - teleservice id
+*/
+tia637::TTeleserviceId CTestMessCreateCdmaSmsUtil::GetTeleServiceId(const TDesC& aTeleService)
+	{
+	//default teleservice ID assigned
+	tia637::TTeleserviceId	teleServiceId = tia637::KTeleserviceWMT;
+
+	iTestStep.INFO_PRINTF2(_L("Teleservice set is : %S"), &aTeleService);
+	if( aTeleService.Compare(KPtTeleScpt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceSCPT;
+		}
+	else if( aTeleService.Compare(KPtTeleCatpt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceCATPT;
+		}
+	else if( aTeleService.Compare(KPtTeleCmt91) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceCMT91;
+		}
+	else if( aTeleService.Compare(KPtTeleVmn) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceVMN;
+		}
+	else if( aTeleService.Compare(KPtTeleWap) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWAP;
+		}
+	else if( aTeleService.Compare(KPtTeleWemt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWEMT;
+		}
+	else if( aTeleService.Compare(KPtTeleWmt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWMT;
+		}
+	else if( aTeleService.Compare(KPtTeleWpt) ==0)
+		{
+		teleServiceId = tia637::KTeleserviceWPT;
+		}
+	else
+		{
+		iTestStep.WARN_PRINTF1(_L("Invalid Teleservice provided. Default WMT used"));
+		}
+
+	return teleServiceId;
+	}
+
+/**
+ Gets the Message Conversion Id
+ @param aTeleService - TPtrC holding the tele service name
+ @return tia637::TTeleserviceId - teleservice id
+*/
+TSmsPIDConversion CTestMessCreateCdmaSmsUtil::GetMessageConversionId(const TDesC& aMessageConversion)
+	{
+	TSmsPIDConversion	smsPidConv = ESmsConvPIDNone;
+
+	iTestStep.INFO_PRINTF2(_L("The message conversion set is  : %S"), &aMessageConversion);
+	if( aMessageConversion.Compare(KPtPidFax) ==0)
+		{
+		smsPidConv = ESmsConvFax;
+		}
+	else if( aMessageConversion.Compare(KPtPidX400) ==0)
+		{
+		smsPidConv = ESmsConvX400;
+		}
+	else if( aMessageConversion.Compare(KPtPidPaging) ==0)
+		{
+		smsPidConv = ESmsConvPaging;
+		}
+	else if( aMessageConversion.Compare(KPtPidMail) ==0)
+		{
+		smsPidConv = ESmsConvMail;
+		}
+	else if( aMessageConversion.Compare(KPtPidErmes) ==0)
+		{
+		smsPidConv = ESmsConvErmes;
+		}
+	else if( aMessageConversion.Compare(KPtPidSpeech) ==0)
+		{
+		smsPidConv = ESmsConvSpeech;
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF1(_L("The message conversion provided is invalid"));
+		iTestStep.INFO_PRINTF1(_L("The default NONE message conversion is set"));
+		}
+	
+	return smsPidConv;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessCreateGsmSmsUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,262 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 creates the Gsm sms header and service settings. It fills up the
+// fields using data read from the ini file
+// 
+//
+ 
+#include "Configuration.cfg"
+
+#include "TestMessCreateGsmSmsUtil.h"
+
+/** 
+ Constructor
+*/
+CTestMessCreateGsmSmsUtil::CTestMessCreateGsmSmsUtil(CTestMessBase &aTestStep)
+: 	CTestMessCreateSmsUtilBase(aTestStep)
+	{
+	aTestStep.INFO_PRINTF1(_L("The GSM SMS util is created"));
+	}
+
+/**
+ Prepares the SMS account details for CSendAs/RSendAs
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+void CTestMessCreateGsmSmsUtil::PrepareAccountL(CMsvSession& /*aSession*/)
+	{
+	}
+
+/**
+ Creates the header object for the GSM sms message
+ @param aBodyText - body text of the message
+ @return CSmsHeader* - pointer to CSmsHeader
+ @leave - KErrNoMemory
+ @leave - system wide error codes
+*/
+CSmsHeader* CTestMessCreateGsmSmsUtil::NewHeaderL(CRichText &aBodyText)
+	{
+	return CSmsHeader::NewL(CSmsPDU::ESmsSubmit, aBodyText);
+	}
+
+/**
+ Fills up the header object with the data read from the ini file.
+ @param aSmsHeader - sms header object ofthe sms message
+ @leave - system wide error codes
+*/
+void CTestMessCreateGsmSmsUtil::PrepareHeaderL(CSmsHeader &aSmsHeader)
+	{
+	//	Get bearer data
+	TPtrC	ptrBearer;
+	TBool	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KBearer, ptrBearer);
+	if ( !returnValue )
+		{
+		//If bearer is not provided, read from the default section of the ini file
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefBearer, ptrBearer);
+		}
+
+	if ( returnValue )
+		{
+		//default value for Bio message ID type
+		TBioMsgIdType	bearer = EBioMsgIdNbs;
+
+		iTestStep.INFO_PRINTF2(_L("Bearer = %S"), &ptrBearer);
+		if (ptrBearer.CompareF(KBearerWap) == 0)
+			{
+			//Set Wap message ID
+			bearer = EBioMsgIdWap;
+			}
+		else if (ptrBearer.CompareF(KBearerWapSecure) == 0)
+			{
+			//Set WapSecure message ID
+			bearer = EBioMsgIdWapSecure;
+			}
+		else
+			{
+			iTestStep.INFO_PRINTF1(_L("No supported bearer is provided. Default is used"));
+			}
+
+		//Set the Bio message ID type.
+#if (defined CDMA_API_ENABLED)
+		aSmsHeader.BioMessage().SetBioMsgIdType(bearer);
+#else
+		aSmsHeader.SetBioMsgIdType(bearer);
+#endif
+		}
+
+	//	Get encoding data
+	TInt	encoding;
+	returnValue=iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KEncoding, encoding);
+	if ( !returnValue )
+		{
+		//If encoding is not provied, read it from the default section of the ini file
+		returnValue=iTestStep.GetIntFromConfig(KDef, KDefEncoding, encoding);
+		}
+	if ( returnValue )
+		{
+		iTestStep.INFO_PRINTF2(_L("Encoding = %d"), encoding);
+#if (defined CDMA_API_ENABLED)
+		TSmsCharacterEncoding	charEncoding;
+
+		switch (encoding)
+			{
+		case 7:
+			//7 bit encoding format
+			charEncoding = KSmsEncoding7BitGsm;
+			break;
+		case 8:
+			//8 bit encoding format
+			charEncoding = KSmsEncodingBinary;
+			break;
+		case 16:
+			//Unicode encoding format
+			charEncoding = KSmsEncodingUnicode;
+			break;
+		default:
+			//default encoding format
+			charEncoding = KSmsEncoding7BitGsm;
+			break;
+			}
+
+		//Set the character encoding
+		aSmsHeader.BioMessage().SetEncoding(charEncoding);
+#else
+		TSmsDataCodingScheme::TSmsAlphabet	alpha = TSmsDataCodingScheme::ESmsAlphabet7Bit;
+
+		switch (encoding)
+			{
+		case 7:
+			alpha = TSmsDataCodingScheme::ESmsAlphabet7Bit;
+			break;
+		case 8:
+			alpha = TSmsDataCodingScheme::ESmsAlphabet8Bit;
+			break;
+		case 16:
+			alpha = TSmsDataCodingScheme::ESmsAlphabetUCS2;
+			break;
+		default:
+			alpha = TSmsDataCodingScheme::ESmsAlphabet7Bit;
+			break;
+			}
+
+		CSmsPDU&	pdu=aSmsHeader.Message().SmsPDU();
+		if ( pdu.DataCodingSchemePresent() )
+			{
+			pdu.SetAlphabet(alpha);
+			}
+#endif
+		}
+
+	//	Get delivery report data
+	TPtrC	ptrDeliveryReport;
+	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KDeliveryReport, ptrDeliveryReport);
+	if ( !returnValue )
+		{
+		returnValue=iTestStep.GetStringFromConfig(KDef, KDefDeliveryReport, ptrDeliveryReport);
+		}
+	if ( returnValue )
+		{
+		TBool	changeDR = EFalse;
+		TBool	deliveryReport = EFalse;
+
+		iTestStep.INFO_PRINTF2(_L("Delivery Report = %S"), &ptrDeliveryReport);
+		if (ptrDeliveryReport.CompareF(_L("NO")) == 0)
+			{
+			changeDR = ETrue;
+			deliveryReport = EFalse;
+			}
+		else if (ptrDeliveryReport.CompareF(_L("YES")) == 0)
+			{
+			changeDR = ETrue;
+			deliveryReport = ETrue;
+			}
+
+		if ( changeDR )
+			{
+#if (defined CDMA_API_ENABLED)
+			aSmsHeader.SetAcknowledgementRequest(ESmsAckTypeDelivery, deliveryReport);
+#else
+			switch ( aSmsHeader.Type() )
+				{
+			case CSmsPDU::ESmsSubmit:
+				aSmsHeader.Submit().SetStatusReportRequest(deliveryReport);
+				break;
+			case CSmsPDU::ESmsCommand:
+				aSmsHeader.Command().SetStatusReportRequest(deliveryReport);
+				break;
+			default:
+				User::Leave(KErrNotSupported);
+				}
+#endif
+			}
+		}
+	}
+/**
+ Sets the fields for the sms account settings using data read from the ini file
+ If no data is given in ini file, the default settings in the account is used.
+ @param aSmsSettings - CSmsSettings reference
+*/
+void CTestMessCreateGsmSmsUtil::SetSmsAccountSettings(CSmsSettings &aSmsSettings)
+	{
+	iTestStep.INFO_PRINTF1(_L("Set SMS account Settings...."));
+	TBool	boolTemp;
+
+	//	Set the Reply quoted setting.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KReplyQuoted, boolTemp) )
+		{
+		aSmsSettings.SetReplyQuoted(boolTemp);
+		}
+
+	//	Set the Reject duplicate settings.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KRejectDuplicate, boolTemp) )
+		{
+#if (defined CDMA_API_ENABLED)
+		aSmsSettings.MessageSettings().Gsm().SetRejectDuplicate(boolTemp);
+#else
+		aSmsSettings.SetRejectDuplicate(boolTemp);
+#endif
+		}
+
+	//	Set the option for delivery report.
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KDeliveryReport, boolTemp) )
+		{
+		aSmsSettings.SetDeliveryReport(boolTemp);
+		}
+
+	//	Set the concatenate feature
+	if ( iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KConCatenate, boolTemp) )
+		{
+#if (defined CDMA_API_ENABLED)
+		aSmsSettings.MessageSettings().Gsm().SetCanConcatenate(boolTemp);
+#else
+		aSmsSettings.SetCanConcatenate(boolTemp);
+#endif
+		}
+
+	//	Set whether to use the same path while replying.
+	if(iTestStep.GetBoolFromConfig(iTestStep.ConfigSection(), KReplyPath, boolTemp))
+		{
+#if (defined CDMA_API_ENABLED)
+		aSmsSettings.MessageSettings().Gsm().SetReplyPath(boolTemp);
+#else
+		aSmsSettings.SetReplyPath(boolTemp);
+#endif
+		}
+
+	//can implement these features later...
+	aSmsSettings.SetValidityPeriod(ESmsVPWeek);	// week 
+	aSmsSettings.SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger); //relative
+	aSmsSettings.SetDelivery(ESmsDeliveryImmediately);
+	aSmsSettings.SetMessageConversion(ESmsConvPIDNone);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessCreateSMS.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,417 @@
+// 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"
+// which accompanies 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 contains CTestMessCreateSMS. This class creates the sms message
+// for GSM or CDMA. For CDMA mtm, it uses utility classes to create
+// the respective GSM or CDMA sms message
+// 
+//
+
+#include "Configuration.cfg"
+
+#include "TestMessCreateSMS.h"
+#include "TestMessEditEntryUtil.h"
+
+//Usage of macros of Cdma mtm
+#include "TestMessCreateGsmSmsUtil.h"
+#if (defined CDMA_API_ENABLED)
+#include "TestMessCreateCdmaSmsUtil.h"
+#endif
+
+// EPOC includes
+#include <mtmuids.h>
+#include <txtrich.h>
+#include <smut.h>
+#include <etelmm.h>
+#include <smutset.h> //For CSmsMessageSettings
+
+/*@{*/
+// Literal constants read from the ini file
+_LIT(KRecipients,			"recipients");
+_LIT(KTo,					"to%d");
+_LIT(KPtSaveDraft,			"SaveInDraft");
+_LIT(KDefTo,				"smsto");
+
+_LIT(KPtMsgBearerGsm,		"GSM");
+//Usage of macros for Cdma mtm
+#if (defined CDMA_API_ENABLED)
+_LIT(KPtMsgBearerType,		"MessageBearerType");
+_LIT(KPtMsgBearerCdma,		"CDMA");
+#endif
+/*@}*/
+
+#if (defined CDMA_API_ENABLED)
+#define KPtDefaultCount		1
+#endif
+
+CTestMessCreateSMS::CTestMessCreateSMS()
+:	CTestMessBase(EFalse)
+,	iSimInDatabase(EFalse)
+	{
+	SetTestStepName(_L("CreateSms"));
+	}
+
+/**
+ Creates the SMS message for GSM or CDMA.
+ @return TVerdict
+*/
+
+TVerdict CTestMessCreateSMS::doTestStepPreambleL()
+	{
+	TVerdict	ret=CTestMessBase::doTestStepPreambleL();
+	// IMK iSimInDatabase=(GetPhoneSmsNumberL(iSimPhoneNumber)==KErrNone);
+	iSimInDatabase=false; //IMK (GetPhoneSmsNumberL(iSimPhoneNumber)==KErrNone);
+	return ret;
+	}
+
+/**
+ Creates the SMS message for GSM or CDMA.
+ @return TVerdict
+*/
+TVerdict CTestMessCreateSMS::doTestStepL()
+	{
+	//	Get scheduling data
+	TTimeIntervalMinutes	scheduledTime=ReadScheduleTime();
+
+	//create the message
+	TBool					saveDraft = EFalse;
+	GetBoolFromConfig(ConfigSection(), KPtSaveDraft, saveDraft);
+
+	if ( saveDraft )
+		{
+		//Create the message in Draft
+		CreateSmsL(KMsvDraftEntryId, scheduledTime);
+		}
+	else
+		{
+		//Creates the message in Outbox
+		CreateSmsL(KMsvGlobalOutBoxIndexEntryId, scheduledTime);
+		}
+
+	return TestStepResult();
+	}
+
+void CTestMessCreateSMS::CreateSmsL(const TMsvId aMsvId, TTimeIntervalMinutes aScheduledTime)
+	{
+	//	Get the bearertype (CDMA/GSM)
+	TPtrC	messageBearerType;
+	messageBearerType.Set(KPtMsgBearerGsm);
+#if (defined CDMA_API_ENABLED)
+	GetStringFromConfig(ConfigSection(), KPtMsgBearerType, messageBearerType);
+	INFO_PRINTF2(_L("The message bearertype is : %S"), &messageBearerType);
+#endif
+
+	CTestMessCreateSmsUtilBase*	createSmsUtil = NULL;
+	//	Create the repective util class
+	if ( messageBearerType.Compare(KPtMsgBearerGsm)==0 )
+		{
+		createSmsUtil=new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+		}
+#if (defined CDMA_API_ENABLED)
+	else if ( messageBearerType.Compare(KPtMsgBearerCdma)==0 )
+		{
+		createSmsUtil=new (ELeave) CTestMessCreateCdmaSmsUtil(*this);
+		}
+#endif
+	else
+		{
+		WARN_PRINTF1(_L("Unknown bearer type using Gsm"));
+		createSmsUtil=new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+		}
+	CleanupStack::PushL(createSmsUtil);
+
+//	All references to PrepareAccountL can be removed when DEF054045 is fixed
+//	createSmsUtil->PrepareAccountL(*iSession);
+
+	if(!iBodyAvailable)
+       {
+		ERR_PRINTF1(_L("No Body"));
+		SetTestStepResult(EFail);
+	   }
+
+	if ( TestStepResult()==EPass )
+		{
+		TInt	err=KErrNone;
+		RSendAs			sendAsServer;
+		User::LeaveIfError(sendAsServer.Connect());
+		CleanupClosePushL(sendAsServer);
+		AddMtmCapabilitiesL(sendAsServer);
+
+		RSendAsMessage	sendAs;
+		TRAP(err, sendAs.CreateL(sendAsServer, KUidMsgTypeSMS));
+		PrepareSendAsL(sendAs);
+
+		if ( err!=KErrNone )
+			{
+			SetTestStepError(err);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("sendAs.SetBodyTextL"));
+			sendAs.SetBodyTextL(*iBodyText);
+
+#if (!defined CDMA_API_ENABLED)
+			TInt	recipients=1;
+			GetIntFromConfig(ConfigSection(), KRecipients, recipients);
+
+			TPtrC	to(iSimPhoneNumber.iTelNumber);
+			TBool	returnValue=ETrue;
+			for ( TInt recipient=0; (recipient<recipients) && (TestStepResult()==EPass); )
+				{
+				++recipient;
+
+				if ( iSimInDatabase )
+					{
+					returnValue=ETrue;
+					}
+				else
+					{
+					TBuf<KMaxTestExecuteCommandLength>	tempStore;
+					tempStore.Format(KTo(), recipient);
+					returnValue=GetStringFromConfig(ConfigSection(), tempStore, to);
+					if ( !returnValue )
+						{
+						returnValue=GetStringFromConfig(KDef, KDefTo, to);
+						}
+					}
+				if ( !returnValue )
+					{
+					ERR_PRINTF1(_L("No To"));
+					SetTestStepResult(EFail);
+					}
+				else
+					{
+					INFO_PRINTF2(_L("To = %S"), &to);
+					sendAs.AddRecipientL(to, RSendAsMessage::ESendAsRecipientTo);
+					}
+				}
+#endif
+
+			TRAP(err, sendAs.SaveMessageAndCloseL());
+			if ( err!=KErrNone )
+				{
+				ERR_PRINTF1(_L("Save Message Failiure"));
+				SetTestStepResult(EFail);
+				sendAs.Close();
+				}
+			else
+				{
+				TMsvId				messageId=KMsvNullIndexEntryId;
+				CMsvEntry*			parent=iSession->GetEntryL(KMsvDraftEntryIdValue);
+				CleanupStack::PushL(parent);
+				parent->SetSortTypeL(SelectionOrdering());
+				CMsvEntrySelection*	selection=parent->ChildrenL();
+				CleanupStack::PushL(selection);
+
+				if ( selection->Count()>0 )
+					{
+					messageId=selection->At(0);
+					}
+				if ( messageId!=KMsvNullIndexEntryId )
+					{
+					SetEntryL(messageId);
+					TMsvEntry	child=EntryL().Entry();
+
+					//Get the message header
+					CSmsHeader*	smsHeader = createSmsUtil->NewHeaderL(*iBodyText);
+					CleanupStack::PushL(smsHeader);
+
+					//If message is too big lets concatenate.....
+					ConCatMessageTextL(*smsHeader);
+
+					CMsvStore*	store =NULL;
+					TRAPD(error, store = EntryL().EditStoreL());
+					if(error != KErrNone)
+						{
+						ERR_PRINTF2(_L("Edit Store Failed. Error %d"), error);
+						SetTestStepError(error);
+						}
+					else
+						{
+						CleanupStack::PushL(store);
+						smsHeader->RestoreL(*store);
+#if (defined CDMA_API_ENABLED)
+						//Adding the recipients...
+						CArrayPtrFlat<CSmsNumber>& recips = smsHeader->Recipients();
+
+						TInt	recipients=KPtDefaultCount;
+						GetIntFromConfig(ConfigSection(), KRecipients, recipients);
+
+						TBool	returnValue;
+						for ( TInt recipient=1; recipient<=recipients; recipient++)
+							{
+							TBuf<KMaxTestExecuteCommandLength>	tempStore;	
+
+							tempStore.Format(KTo(), recipient);	
+
+							TPtrC	to;
+							returnValue=GetStringFromConfig(ConfigSection(), tempStore, to);
+							if ( !returnValue )
+								{
+								returnValue=GetStringFromConfig(KDef, KDefTo, to);
+								}
+							if ( !returnValue )
+								{
+								ERR_PRINTF1(_L("No To"));
+								SetTestStepResult(EFail);
+								}
+							else
+								{
+								INFO_PRINTF2(_L("To = %S"), &to);
+
+								//Get the recipient array
+								CSmsNumber* newRecip = CSmsNumber::NewL();
+								CleanupStack::PushL(newRecip);
+
+								// Check for the email address in recipient
+								// This is for email over sms feature
+								if(to.Locate('@') != KErrNotFound)
+									{
+									newRecip->SetAddressL(to, EMsvAddressTypeEMail);
+									}
+								else
+									{
+									newRecip->SetAddressL(to, EMsvAddressTypeISDN);
+									}
+
+								//Append the recipients
+								recips.AppendL(newRecip);
+								CleanupStack::Pop(newRecip);
+								}
+							}
+#endif
+						child.SetSendingState(KMsvSendStateSuspended);
+						child.SetInPreparation(EFalse);
+						child.SetVisible(ETrue);
+
+						//Get the details
+						TBuf<KSmsDetailsLength>	details;
+
+//Usage of macros of Cdma mtm
+#if (!defined CDMA_API_ENABLED)
+						if ( TSmsUtilities::GetDetails(EntryL().Session().FileSession(), smsHeader->Message(), details) == KErrNone )
+							{
+							child.iDetails.Set(details);
+							}
+#else
+						//if ( TSmsUtilities::GetDetails(EntryL().Session().FileSession(), smsHeader->Message(), details) == KErrNone )
+						CArrayPtrFlat<CSmsNumber>& smsNumberArray = smsHeader->Recipients();
+						if ( smsNumberArray.Count() )
+							{
+							details.Copy(smsNumberArray[0]->Address());
+							}
+						if ( details.Length() )
+							{
+							child.iDetails.Set(details);
+							}
+#endif
+
+						//Get the description
+						TBuf<KSmsDescriptionLength>	desc;
+						if ( TSmsUtilities::GetDescription(smsHeader->Message(), desc) == KErrNone )
+							{
+							child.iDescription.Set(desc);
+							}
+
+						//fill up the fields of the message header
+						PrepareHeaderL(*createSmsUtil, *smsHeader);
+
+						//set the scheduled time if any
+						if ( aScheduledTime!=TTimeIntervalMinutes(0) )
+							{
+							child.SetSendingState(KMsvSendStateScheduled);
+							child.SetScheduled(ETrue);
+							child.iDate.UniversalTime();
+							child.iDate+=aScheduledTime;
+							}
+
+						//	Update entry with data set from .ini file
+						EntryL().ChangeL(child);
+						smsHeader->StoreL(*store);
+						store->CommitL();
+						CleanupStack::PopAndDestroy(store);
+
+						CTestMessEditEntryUtil*	editUtil=new (ELeave) CTestMessEditEntryUtil(*this, ETrue, iSimInDatabase, iSimPhoneNumber);
+						CleanupStack::PushL(editUtil);
+						editUtil->ProcessEntryL(EntryL().EntryId());
+						CleanupStack::PopAndDestroy(editUtil);
+
+						if ( aMsvId==KMsvGlobalOutBoxIndexEntryId )
+							{
+							// Move the selected message to out box
+							CTestActive*	active=CTestActive::NewLC(*this);
+							CMsvOperation*	op=parent->MoveL(child.Id(), KMsvGlobalOutBoxIndexEntryIdValue, active->iStatus);
+							CleanupStack::PushL(op);
+							active->Activate();
+							CActiveScheduler::Start();
+							CleanupStack::PopAndDestroy(2, active);
+							}
+						}
+					CleanupStack::PopAndDestroy(smsHeader);
+					}
+				CleanupStack::PopAndDestroy(2, parent);
+				}
+			}
+
+		CleanupStack::PopAndDestroy(&sendAsServer);
+		}
+	CleanupStack::PopAndDestroy(createSmsUtil);
+	}
+
+void CTestMessCreateSMS::AddMtmCapabilitiesL(RSendAs& aSendAs)
+	{
+	aSendAs.ResetMessageFilter();
+	}
+
+void CTestMessCreateSMS::PrepareSendAsL(RSendAsMessage& /*aSendAs*/)
+	{
+	}
+
+void CTestMessCreateSMS::PrepareHeaderL(CTestMessCreateSmsUtilBase& aCreateUtil, CSmsHeader& aSmsHeader)
+	{
+	aCreateUtil.PrepareHeaderL(aSmsHeader);
+	}
+
+//Usage of macro for CDMA mtm
+#if (defined CDMA_API_ENABLED)
+void CTestMessCreateSMS::ConCatMessageTextL(CSmsHeader& /*aHeader*/)
+	{
+	}
+#else
+void CTestMessCreateSMS::ConCatMessageTextL(CSmsHeader& aHeader)
+	//Doxygen compatible comments
+	/**
+		This method Concatenates the long message. Checks for the length of 
+		body, if it is greater than 160 characters sets the concatenation 
+		option on for the Sms.
+
+		@param aHeader
+		Header for which the concatenation option is set on... 
+
+	*/
+	{
+	CSmsSettings*	smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	//if the length of the iBodyText is greater than the sms maximum length
+	//i.e 160 chars...Set the Concatenation On....
+	if( aHeader.Message().MessageLengthL() > aHeader.Message().MaxMessageLength() )
+		{
+		INFO_PRINTF1(_L("Concatenate Message..."));
+		INFO_PRINTF1(_L("Message Exceeds max length setting Concatenate On..."));
+		aHeader.GetSmsSettingsL(*smsSettings);
+		smsSettings->SetCanConcatenate(ETrue);
+		aHeader.SetSmsSettingsL(*smsSettings);
+		}
+	CleanupStack::PopAndDestroy(smsSettings);
+	}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessCreateSMSaccount.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,154 @@
+// 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"
+// which accompanies 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 contains CTestMessCreateSmsAccount which creates an SMS
+// account folder for GSM or CDMA
+// 
+//
+
+#include "TestMessCreateSmsAccount.h"
+#include "TestMess.h"
+#include "Configuration.cfg"
+
+// EPOC includes
+#include <msvids.h>
+#include <miutset.h>
+#include <msvstore.h>
+
+#include "TestMessCreateGsmSmsUtil.h"
+//Usage of Macro for CDMA mtm
+#if (defined CDMA_API_ENABLED)
+#include "TestMessCreateCdmaSmsUtil.h"
+#endif
+
+#include <csmsaccount.h>
+#include <msvschedulesettings.h>
+#include <msvoffpeaktime.h>
+#include <msvsenderroraction.h>
+#include <msvsysagentaction.h>
+
+/*@{*/
+_LIT(KSCName,				"scname");
+_LIT(KSCNumber,				"scnumber");
+
+_LIT(KPtGSM,				"GSM");
+#if (defined CDMA_API_ENABLED)
+_LIT(KPtMessageBearerType,	"MessageBearerType");
+_LIT(KPtCDMA,				"CDMA");		
+#endif
+/*@}*/
+
+CTestMessCreateSmsAccount::CTestMessCreateSmsAccount()
+:	CTestMessBase(EFalse)
+	{
+	SetTestStepName(_L("CreateSmsAccount"));
+	}
+
+/**
+ Creates the SMS account folder for GSM or CDMA. For CDMA mtm,
+ it creates the respective utility class for creating the account
+ @return TVerdict
+*/
+TVerdict CTestMessCreateSmsAccount::doTestStepL()
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Create SMS account"));
+
+	TPtrC	ptrSCName;
+	TBool	returnValue =GetStringFromConfig(ConfigSection(), KSCName, ptrSCName);
+	INFO_PRINTF2(_L("SC Name = %S"), &ptrSCName);
+
+	TPtrC	ptrSCNumber;
+	returnValue =GetStringFromConfig(ConfigSection(), KSCNumber, ptrSCNumber);
+	INFO_PRINTF2(_L("SC Number = %S"), &ptrSCNumber);
+
+	CSmsAccount*			smsAccount = CSmsAccount::NewLC();
+	CMsvScheduleSettings*	scheduleSetting = CMsvScheduleSettings::NewLC();
+	CMsvOffPeakTimes*		offPeakTimes=new (ELeave) CMsvOffPeakTimes();
+	CleanupStack::PushL(offPeakTimes);
+	CMsvSendErrorActions*	errorActions=CMsvSendErrorActions::NewLC();
+	CMsvSysAgentActions*	sysAgentActions=new (ELeave) CMsvSysAgentActions();
+	CleanupStack::PushL(sysAgentActions);
+	CSmsSettings*		smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	SetEntryL(KMsvRootIndexEntryId);
+
+	EntryL().SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=EntryL().ChildrenWithTypeL(KUidMsvServiceEntry);
+	CleanupStack::PushL(selection);
+	TInt				count=selection->Count();
+	TBool				found=EFalse;
+	for (TInt i=count; i>0 && !found; )
+		{
+		SetEntryL(selection->At(--i));
+
+		// Only one Sms Service allowed
+		if	(	EntryL().Entry().iMtm == KUidMsgTypeSMS &&
+				EntryL().Entry().iType == KUidMsvServiceEntry
+			)
+			{
+			found=ETrue;
+			}
+		}
+
+	if ( !found )
+		{
+		smsAccount->InitialiseDefaultSettingsL(*smsSettings);
+		smsAccount->InitialiseDefaultSettingsL(*scheduleSetting, *offPeakTimes, *errorActions, *sysAgentActions);
+
+		TPtrC	messageBearerType;
+		messageBearerType.Set(KPtGSM);
+#if (defined CDMA_API_ENABLED)
+		GetStringFromConfig(ConfigSection(), KPtMessageBearerType, messageBearerType);
+		INFO_PRINTF2(_L("The message bearer type is : %S"), &messageBearerType);
+#endif
+
+		CTestMessCreateSmsUtilBase*	createSmsUtil = NULL;
+		//Creates the util class for GSM or CDMA
+		if ( messageBearerType.Compare(KPtGSM)==0 )
+			{
+			createSmsUtil = new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+			}
+#if (defined CDMA_API_ENABLED)
+		else if( messageBearerType.Compare(KPtCDMA)==0 )
+			{
+			createSmsUtil = new (ELeave) CTestMessCreateCdmaSmsUtil(*this);
+			}
+#endif
+		else
+			{
+			WARN_PRINTF1(_L("Unknown bearer type using Gsm"));
+			createSmsUtil= new (ELeave) CTestMessCreateGsmSmsUtil(*this);
+			}
+		CleanupStack::PushL(createSmsUtil);
+
+		//Changes the new account settings
+		createSmsUtil->SetSmsAccountSettings(*smsSettings);
+		CleanupStack::PopAndDestroy(createSmsUtil);
+
+		smsAccount->SaveSettingsL(*smsSettings);
+		smsAccount->SaveSettingsL(*scheduleSetting, *offPeakTimes, *errorActions, *sysAgentActions);
+		}
+
+	if ( TestStepResult()==EPass )
+		{
+		smsAccount->LoadSettingsL(*smsSettings);
+		smsSettings->AddServiceCenterL(ptrSCName, ptrSCNumber);
+		smsAccount->SaveSettingsL(*smsSettings);
+		}
+
+	CleanupStack::PopAndDestroy(2, smsSettings);
+	CleanupStack::PopAndDestroy(5, smsAccount);
+
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessCreateSmsUtilBase.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,27 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 is the base class for create CDMA or GSM SMS utility class
+// 
+//
+
+
+#include "TestMessCreateSmsUtilBase.h"
+
+/**
+ Constructor
+*/
+CTestMessCreateSmsUtilBase::CTestMessCreateSmsUtilBase(CTestMessBase &aTestStep)
+: iTestStep(aTestStep)
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessEditEntry.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,170 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntry which edits the entry characterstics
+// 
+//
+ 
+#include "TestMessEditEntry.h"
+#include "TestMessEditEntryUtil.h"
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+_LIT(KPtSaveToOutbox,			"SaveToOutbox");
+/*@}*/
+
+// Default value for depth of the count
+#define KDefaultDepthCount	1
+
+/**
+ * Override of base class pure virtual
+ * @param  None
+ * @return TVerdict - return TVerdict codes
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntry::ProcessMessageL(CBaseMtm& /*aBaseMtm*/, TMsvId /*aMsgId*/)
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Edit Entry"));
+
+	if ( TestStepResult() == EPass )
+		{
+		CTestMessEditEntryUtil*	editUtil=new (ELeave) CTestMessEditEntryUtil(*this, EFalse, EFalse, RMobilePhone::TMobileAddress());
+		CleanupStack::PushL(editUtil);
+
+		editUtil->ProcessEntryL(EntryL().EntryId());
+
+		//Read whether the message is saved in outbox
+		TBool saveOutbox;
+		if( ! GetBoolFromConfig(ConfigSection(), KPtSaveToOutbox, saveOutbox))
+			{
+			saveOutbox = EFalse;
+			}
+
+		INFO_PRINTF2(_L("The message saved in outbox flag is : %S"), &saveOutbox);
+		if(saveOutbox)
+			{
+			//Move the message to outbox
+			MoveMessageL(EntryL().EntryId(), KMsvGlobalOutBoxIndexEntryId);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Entry is not moved"));
+			}
+
+		CleanupStack::PopAndDestroy(editUtil);
+		}
+	}
+
+/**
+ Move the message the destination folder
+ @param aMessageId - TMsvId of the message
+ @param aFolderId - TMsvId of the destination folder
+ @leave KErrNoMemory
+ @leave KErrNotFound
+*/
+void CTestMessEditEntry::MoveMessageL(TMsvId aMessageId,TMsvId aFolderId)
+	{
+	// Get CMsvEntry object and the TMsvEntry of the message
+	CMsvEntry*		msgvEntry = iSession->GetEntryL(aMessageId);
+	CleanupStack::PushL(msgvEntry);
+	TMsvEntry entry= msgvEntry->Entry();
+
+	// Get the parent folder Id of the messaage and create the CMsvEntry
+	TMsvId			parentId = entry.Parent();
+	CMsvEntry*		msvEntry = iSession->GetEntryL(parentId);
+	CleanupStack::PushL(msvEntry);
+
+	// Create the active object for handling asynchronous request
+	CMoveOperation*	activeOperation = CMoveOperation::NewL();
+	CleanupStack::PushL(activeOperation);
+
+	// Move the selected message to given target folder
+	CMsvOperation*	op = msvEntry->MoveL(aMessageId, aFolderId, activeOperation->iStatus);
+	CleanupStack::PushL(op);
+
+	// Start the Active scheduler 
+	activeOperation->SetOperation();
+	CActiveScheduler::Start();
+	TInt	error = activeOperation->iStatus.Int();
+	if(error == KErrNone)
+		{
+		INFO_PRINTF1(_L("message moved successfully"));
+		}
+	else
+		{
+		INFO_PRINTF2(_L("message failed to be moved. Error : %d"),error);
+		SetTestStepResult(EFail);
+		}
+		//Destroy the object
+	CleanupStack::PopAndDestroy(4, msgvEntry);
+	}
+
+/**
+ Constructor for CMoveOperation 
+*/
+CTestMessEditEntry::CMoveOperation::CMoveOperation()
+: CActive(CActive::EPriorityStandard)
+	{
+	}
+
+/**
+ Two phase constructor
+ @return CTestMessEditEntry::CMoveOperation* - pointer of CTestMessEditEntry::CMoveOperation
+ @leave - KErrNoMemory
+ @leave - System wide error codes
+*/
+CTestMessEditEntry::CMoveOperation* CTestMessEditEntry::CMoveOperation::NewL()
+	{
+	CMoveOperation* self = new (ELeave) CMoveOperation();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/**
+ Second phase construction
+ @leave - sytem wide error codes
+*/
+void CTestMessEditEntry::CMoveOperation::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+/**
+ Sets the operation as active
+*/
+void CTestMessEditEntry::CMoveOperation::SetOperation()
+	{
+	SetActive();
+	}
+
+/**
+ Operation completed event handler.
+*/
+void CTestMessEditEntry::CMoveOperation::RunL()
+	{
+	CActiveScheduler::Stop();
+	}
+
+/**
+ Cancels the active operation
+*/
+void CTestMessEditEntry::CMoveOperation::DoCancel()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessEditEntryUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,249 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+// 
+//
+
+
+#include "TestMessEditEntryUtil.h"
+
+// EPOC includes
+
+#include <smut.h>
+#include <miutmsg.h>
+#include <mtclreg.h>
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+_LIT(KToRecipients,			"toRecipients");
+_LIT(KTo,					"to%d");
+_LIT(KDef,					"default");
+_LIT(KDefTo,				"emailto");
+
+// Literal constants used
+_LIT(KCharacterSetType,		"characterSetType");
+_LIT(KPtEditBody,			"EditBody");
+_LIT(KPtEditRecipients,		"EditRecipients");
+_LIT(KPtRecipient,			"recipient%d");
+/*@}*/
+
+CTestMessEditEntryUtil::CTestMessEditEntryUtil(CTestMessBase& aTestStep, TBool aSimChecked, TBool aSimInDatabase, RMobilePhone::TMobileAddress aSimPhoneNumber)
+:	CTestMessStoreProcessUtil(aTestStep, EFalse)
+,	iSimChecked(aSimChecked)
+,	iSimInDatabase(aSimInDatabase)
+,	iSimPhoneNumber(aSimPhoneNumber)
+	{
+	}
+
+/**
+ * Edits the ImHeaders of the Entry
+ * @param  CImHeader& aHeader - Im Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntryUtil::ProcessImHeaderL(CImHeader& aHeader)
+	{
+	// Edit the CImHeader information
+	TInt	recipients;
+	if ( !iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KToRecipients, recipients) )
+		{
+		recipients=0;
+		}
+
+	for ( TInt recipient=1; recipient<=recipients; recipient++)
+		{
+		TBuf<KMaxTestExecuteCommandLength>	tempStore;
+		tempStore.Format(KTo(), recipient);
+
+		TPtrC	to;
+		TInt	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), tempStore, to);
+		if ( !returnValue )
+			{
+			returnValue=iTestStep.GetStringFromConfig(KDef, KDefTo, to);
+			}
+		if ( !returnValue )
+			{
+			iTestStep.ERR_PRINTF1(_L("No To"));
+			iTestStep.SetTestStepResult(EFail);
+			}
+		else
+			{
+			iTestStep.INFO_PRINTF2(_L("To = %S"), &to);
+			aHeader.ToRecipients().AppendL(to);
+			}
+		}
+	}
+
+/**
+ * Edits the ImMimeHeaders of the message entry
+ * @param  CImMimeHeader& aHeader - Mime Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntryUtil::ProcessImMimeHeaderL(CImMimeHeader& aHeader)
+	{
+	// Update the character set info
+	TPtrC	charSetType;
+	if ( iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KCharacterSetType, charSetType) )
+		{
+		TUint	charSetVal;
+		if ( ValidCharacterSetInfo(charSetType, charSetVal) )
+			{
+			aHeader.SetMimeCharset(charSetVal);
+			}
+		}
+	}
+
+/**
+ * Edits the ImIAPPreferences of the entry
+ * @param  CImIAPPreferences& aPreferences - IAP Preferences to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessEditEntryUtil::ProcessInternetAccessPreferencesL(CImIAPPreferences& /*aPreferences*/)
+	{
+	}
+
+/**
+ Edits the CSmsHeader of the entry
+ @param  CSmsHeader& aHeader - Sms Header to edit
+ @return None
+ @panic None
+ @leave KErrNoMemory
+*/
+void CTestMessEditEntryUtil::ProcessSmsHeaderStreamL(CSmsHeader& aSmsHeader)
+	{
+	// Get the number of recipients 
+	TInt	recipients = 0;
+	if ( !iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), KPtEditRecipients, recipients) )
+		{
+		recipients=0;
+		iTestStep.INFO_PRINTF1(_L("No Recipients edited/added"));
+		}
+	iTestStep.INFO_PRINTF2(_L("The number of recipients : %d"), recipients);
+
+	if ( !iSimChecked )
+		{
+		//IMK iSimInDatabase=(iTestStep.GetPhoneSmsNumberL(iSimPhoneNumber)==KErrNone);
+		iSimInDatabase=0;
+		}
+	TPtrC	to(iSimPhoneNumber.iTelNumber);
+	TInt	returnValue=ETrue;
+	for ( TInt recipient=0; (recipient<recipients) && (iTestStep.TestStepResult()==EPass); )
+		{
+		++recipient;
+		if ( iSimInDatabase )
+			{
+			returnValue=ETrue;
+			}
+		else
+			{
+			TBuf<KMaxTestExecuteCommandLength>	tempStore;
+			tempStore.Format(KPtRecipient(), recipient);
+
+			//Get the recipient address
+			returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), tempStore, to);
+			if ( !returnValue )
+				{
+				returnValue=iTestStep.GetStringFromConfig(KDef, KDefTo, to);
+				}
+			}
+		if ( !returnValue )
+			{
+			iTestStep.ERR_PRINTF1(_L("Recipient number is not Provided"));
+			iTestStep.SetTestStepResult(EFail);
+			}
+		else
+			{
+			//Append the recipient address in recipient list
+			CSmsNumber*	smsNumber = CSmsNumber::NewL();
+			CleanupStack::PushL(smsNumber);
+			iTestStep.INFO_PRINTF2(_L("To = %S"), &to);
+			smsNumber->SetAddressL(to);
+			aSmsHeader.Recipients().AppendL(smsNumber);
+			//No need to destory CSmsNumber. CSmsHeader destroys it
+			CleanupStack::Pop(smsNumber);
+			}
+		}
+	}
+
+
+/**
+ Edits the CRichText of the entry
+ @param  CRichText& aBodyText - Text to edit
+ @return None
+ @panic None
+ @leave KErrNoMemory
+*/
+void CTestMessEditEntryUtil::ProcessRichTextBodyL(CRichText& aBodyText)
+	{
+	TPtrC	ptrBody;
+	//Get the body text file
+	TBool	returnValue=iTestStep.GetStringFromConfig(iTestStep.ConfigSection(), KPtEditBody, ptrBody);
+	if ( !returnValue )
+		{
+		iTestStep.INFO_PRINTF1(_L("Body is not edited"));
+		}
+	else
+		{
+		iTestStep.INFO_PRINTF2(_L("Body = %S"), &ptrBody);
+
+		// open the file
+		RFs rfs;
+		rfs.Connect();
+		RFile	file;
+
+		//Append the body text of the entry
+		TInt anError = file.Open(rfs, ptrBody, EFileShareAny);
+		if(anError == KErrNone)
+			{
+			TBool		reading=ETrue;
+			TInt		pos = aBodyText.LdDocumentLength();
+			TBuf8<1>	charIn;
+			while (reading)
+				{
+				file.Read(charIn, 1);
+				if(charIn.Length())
+					switch ( charIn[0] )
+						{
+					case '\r':
+						aBodyText.InsertL(pos++, CEditableText::ELineBreak);
+					case '\n':
+						break;
+					default:
+						aBodyText.InsertL(pos++, TChar(charIn[0]));
+						}
+				else
+					{
+					reading = FALSE;	// stop at the end of the file
+					}
+				}
+			file.Close();
+			rfs.Close();
+			}
+		else
+			{
+			iTestStep.ERR_PRINTF2(_L("Cannot open file = %S"), &ptrBody);
+			iTestStep.SetTestStepResult(EFail);
+			}
+		}	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessPrintEntryUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,117 @@
+// 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"
+// which accompanies 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 contains CTestMessEditEntryUtil. A utility to edit an entry
+// 
+//
+
+#include "Configuration.cfg"
+
+#include "TestMessPrintEntryUtil.h"
+
+CTestMessPrintEntryUtil::CTestMessPrintEntryUtil(CTestMessBase& aTestStep)
+:	CTestMessStoreProcessUtil(aTestStep, ETrue)
+	{
+	}
+
+/**
+ * Prints the ImHeaders of the Entry
+ * @param  CImHeader& aHeader - Im Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessImHeaderL(CImHeader& aHeader)
+	{
+	TPtrC	ptrTemp;
+
+	ptrTemp.Set(aHeader.From());
+	iTestStep.INFO_PRINTF2(_L("  From                         : %S"), &ptrTemp);
+	ptrTemp.Set(aHeader.ReceiptAddress());
+	iTestStep.INFO_PRINTF2(_L("  ReceiptAddress               : %S"), &ptrTemp);
+	ptrTemp.Set(aHeader.ReplyTo());
+	iTestStep.INFO_PRINTF2(_L("  ReplyTo                      : %S"), &ptrTemp);
+	ptrTemp.Set(aHeader.Subject());
+	iTestStep.INFO_PRINTF2(_L("  Subject                      : %S"), &ptrTemp);
+	}
+
+/**
+ * Prints the ImMimeHeaders of the message entry
+ * @param  CImMimeHeader& aHeader - Mime Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessImMimeHeaderL(CImMimeHeader& /*aHeader*/)
+	{
+	}
+
+/**
+ * Prints the ImIAPPreferences of the entry
+ * @param  CImIAPPreferences& aPreferences - IAP Preferences to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessInternetAccessPreferencesL(CImIAPPreferences& aPreferences)
+	{
+	TInt	prefs=aPreferences.NumberOfIAPs();
+	for ( TInt pref=0; pref<prefs; )
+		{
+		TImIAPChoice	choice=aPreferences.IAPPreference(pref++);
+		iTestStep.INFO_PRINTF2(_L("  IAP Preference               : %d"), pref);
+		iTestStep.INFO_PRINTF2(_L("  iIAP                         : %d"), choice.iIAP);
+		iTestStep.INFO_PRINTF2(_L("  iDialogPref                  : %d"), choice.iDialogPref);
+		}
+	}
+
+/**
+ * Prints the CSmsHeader of the entry
+ * @param  CSmsHeader& aHeader - Sms Header to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessSmsHeaderStreamL(CSmsHeader& aHeader)
+	{
+#if (defined CDMA_API_ENABLED)
+	CSmsSettings*	smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	aHeader.GetDefaultMessageSettingsL(*smsSettings);
+	TSmsMessageType	pduType = aHeader.MessageType();
+	TBool			replyPath = smsSettings->ReplyPath();
+	CleanupStack::PopAndDestroy(smsSettings);
+#else
+	CSmsPDU::TSmsPDUType	pduType=aHeader.Type();
+	TBool					replyPath = aHeader.ReplyPathProvided();
+#endif
+	iTestStep.INFO_PRINTF2(_L("  pduType                      : %d"), pduType);
+	iTestStep.INFO_PRINTF2(_L("  replyPathProvided            : %d"), replyPath);
+	}
+
+
+/**
+ * Prints the CRichText of the entry
+ * @param  CRichText& aBodyText - Text to edit
+ * @return None
+ * @panic None
+ * @leave KErrNoMemory
+ *  
+*/
+void CTestMessPrintEntryUtil::ProcessRichTextBodyL(CRichText& /*aBodyText*/)
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessProcessExistingMsg.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,89 @@
+// 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"
+// which accompanies 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 contains CTestMessProcessExistingMsg
+// Base class for processing an existing message
+// 
+//
+
+/**
+ @file TestMessProcessExistingMsg.cpp
+*/
+
+#include "TestMessProcessExistingMsg.h"
+
+// EPOC includes
+#include <mtclreg.h>
+#include <miuthdr.h>
+#include <txtfmlyr.h>
+#include <txtrich.h>
+#include <miutmsg.h>
+
+/**
+ * Constructor.
+ * @return - None
+ * 
+*/	
+CTestMessProcessExistingMsg::CTestMessProcessExistingMsg()
+:	CTestMessBase(ETrue)
+	{
+	}
+
+/**
+ * Override of base class pure virtual function
+ * @return - TVerdict code
+ * @leave - KErrNoMemory - memory allocatior failure
+ * @leave - KErrBadLibraryEntryPoint  - Malformed MTM
+ * @leave - KErrNotFound - Not found the mtmUid and StepStepResult set to Fail
+ * 
+*/	
+TVerdict CTestMessProcessExistingMsg::doTestStepL()
+	{
+	if ( TestStepResult() == EPass )
+		{
+		CClientMtmRegistry*	clientMtmRegistry=CClientMtmRegistry::NewL(*iSession);
+		CleanupStack::PushL(clientMtmRegistry);
+
+		iMtmID=EntryL().Entry().iMtm;
+
+		CBaseMtm*	baseMtm=clientMtmRegistry->NewMtmL(iMtmID);
+		CleanupStack::PushL(baseMtm);
+
+		// switch the context
+		TMsvId		msgId=EntryL().EntryId();
+		PrintEntryL(EntryL());
+		baseMtm->SwitchCurrentEntryL(msgId);
+		baseMtm->LoadMessageL();
+
+		ProcessMessageL(*baseMtm, msgId);
+
+		if ( TestStepResult() == EPass )
+			{
+			PostProcessMessageL();
+			}
+
+		CleanupStack::PopAndDestroy(2, clientMtmRegistry);
+		}
+	
+	return TestStepResult();
+	}
+
+/**
+ * Nothing done for open
+ * @return None
+ * @leave KErrNone and TestStepResult set to EFail
+ * 
+*/
+void CTestMessProcessExistingMsg::PostProcessMessageL()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessProcessor.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,288 @@
+// 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"
+// which accompanies 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 contains CTestMessProcessor which an active object utility
+// used for send/recieving or any time consuming 
+// 
+//
+
+#include "TestMessProcessor.h"
+#include "TestMessBase.h"
+
+CTestMessProcessor* CTestMessProcessor::NewL(CTestStep& aTestStep, CMsvSession& aSession)
+	{
+	CTestMessProcessor*	self=new(ELeave) CTestMessProcessor(aTestStep, aSession);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestMessProcessor::CTestMessProcessor(CTestStep& aTestStep, CMsvSession& aSession)
+:	CActive(EPriorityStandard)
+,	iState(EStatePrepareToSendMsg)
+,	iTestStep(aTestStep)
+,	iSession(aSession)
+,	iEntry(NULL)
+,	iMsgId(KMsvRootIndexEntryId)
+,	iClient(NULL)
+,	iMsvOperation(NULL)
+,	iCancelSms(EFalse)
+	{
+	}
+
+CTestMessProcessor::~CTestMessProcessor()
+	{
+	delete iEntry;
+	iEntry=NULL;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	}
+
+void CTestMessProcessor::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CTestMessProcessor::DoCancel()
+	{
+	iTestStep.INFO_PRINTF1(_L("Cancel operation"));
+	iMsvOperation->Cancel();
+	}
+
+void CTestMessProcessor::DisplayProgress()
+	{
+	// display the current progress
+	switch(iState)
+		{
+	case EStatePrepareToSendMsg:
+		{
+		TMsvLocalOperationProgress			temp;
+		TPckgC<TMsvLocalOperationProgress>	progress(temp);
+
+		progress.Set(iMsvOperation->ProgressL());
+		iTestStep.INFO_PRINTF1(_L("   Progress"));
+		iTestStep.INFO_PRINTF2(_L("       Operation              :%d"), progress().iType);
+		iTestStep.INFO_PRINTF2(_L("       Total Number Of Entries:%d"), progress().iTotalNumberOfEntries);
+		iTestStep.INFO_PRINTF2(_L("       Number Completed       :%d"), progress().iNumberCompleted);
+		iTestStep.INFO_PRINTF2(_L("       Number Failed          :%d"), progress().iNumberFailed);
+		iTestStep.INFO_PRINTF2(_L("       Number Remaining       :%d"), progress().iNumberRemaining);
+		iTestStep.INFO_PRINTF2(_L("       Error                  :%d"), progress().iError);
+		iTestStep.INFO_PRINTF2(_L("       Id                     :%x"), progress().iId);
+		}
+		break;
+	case EStateRequest:
+		iClient->DisplayProgressL(EFalse, iMsvOperation);
+		break;
+	default:
+		break;
+		}
+	}
+
+void CTestMessProcessor::SendEmailMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+/**
+ Sends the sms message. It sets the fields of the enty.
+ @param aMsgId - TMsvId of the message
+ @param aClient - Pointer to the MTestMessProcessClient
+ @param aCancelSms - Bool value for the Cancel sms flag
+*/
+void CTestMessProcessor::SendSmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient, TBool aCancelSms)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+	iCancelSms = aCancelSms;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetConnected(ETrue);
+	iMsgEntry.SetFailed(EFalse);
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	iMsgEntry.iError = KErrNone;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+void CTestMessProcessor::SendMmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+void CTestMessProcessor::MtmRequestL(TMsvId aAccountId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aAccountId;
+	iClient=aClient;
+	iState=EStateRequest;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iStatus = KRequestPending;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+	if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+		{
+		SetActive();
+		}
+	}
+
+void CTestMessProcessor::RunL()
+	{
+	switch(iState)
+		{
+	case EStatePrepareToSendMsg:
+		switch (iStatus.Int())
+			{
+		case KErrNone:
+			{
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+			delete iEntry;
+			iEntry=NULL;
+			iEntry=iSession.GetEntryL(iMsgId);
+			iMsgEntry=iEntry->Entry();
+			iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+			iEntry->ChangeL(iMsgEntry);
+			if ( iMsgEntry.SendingState() == KMsvSendStateWaiting )
+				{
+				iState=EStateRequest;
+				iStatus = KRequestPending;
+				TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+				if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+					{
+					SetActive();
+					}
+				else
+					{
+					CActiveScheduler::Stop();
+					}
+				}
+			else
+				{
+				iTestStep.ERR_PRINTF2(_L("Sending State not Waiting :%d"), iMsgEntry.SendingState());
+				iTestStep.SetTestStepResult(EFail);
+				CActiveScheduler::Stop();
+				}
+			}
+			break;
+		case KErrCancel:
+			{
+			if(iCancelSms)
+				{
+				iTestStep.INFO_PRINTF1(_L("Sending of the mesage Cancelled successfully"));
+				}
+			else
+				{
+				iTestStep.ERR_PRINTF2(_L("Message failed to Send, Error = %d"), iStatus.Int());
+				iTestStep.SetTestStepResult(EFail);
+				}
+			CActiveScheduler::Stop();
+			break;
+			}
+		default:
+			iTestStep.ERR_PRINTF2(_L("Unknown Event :%d"), iStatus.Int());
+			iTestStep.SetTestStepResult(EFail);
+			CActiveScheduler::Stop();
+			}
+		break;
+	case EStateRequest:
+		switch (iStatus.Int())
+			{
+		case KErrNone:
+			{
+			TInt	error=iClient->DisplayProgressL(ETrue, iMsvOperation);
+			if ( error != KErrNone )
+				{
+				iTestStep.ERR_PRINTF2(_L("Progress Error:%d"), error);
+				iTestStep.SetTestStepResult(EFail);
+				}
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+
+			//	Is there another operation
+			if ( iClient->MoreOperations() )
+				{
+				iStatus = KRequestPending;
+				TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+				if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+					{
+					SetActive();
+					}
+				else
+					{
+					CActiveScheduler::Stop();
+					}
+				}
+			else
+				{
+				CActiveScheduler::Stop();
+				}
+			}
+			break;
+		case KErrServerTerminated:
+			{
+			TInt	error=iClient->DisplayProgressL(ETrue, iMsvOperation);
+			if ( error != KErrServerTerminated )
+				{
+				iTestStep.ERR_PRINTF2(_L("Progress Error:%d"), error);
+				iTestStep.SetTestStepResult(EFail);
+				}
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+			CActiveScheduler::Stop();
+			}
+		default:
+			iTestStep.ERR_PRINTF2(_L("Unknown Event :%d"), iStatus.Int());
+			iTestStep.SetTestStepResult(EFail);
+			CActiveScheduler::Stop();
+			}
+		break;
+	default:
+		iTestStep.ERR_PRINTF1(_L("No handler found in CTestMessProcessor class"));
+		iTestStep.SetTestStepResult(EFail);
+		CActiveScheduler::Stop();
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessServer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,192 @@
+// 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"
+// which accompanies 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 "TestMessServer.h"
+#include "TestMessSession.h"
+#include "TestMessCleanMessageFolder.h"
+#include "TestMessCreateSmsAccount.h"
+//IMK #include "TestMessCreatePopAccount.h"
+//IMK #include "TestMessCreateImapAccount.h"
+#include "TestMessSetDefaultSc.h"
+//IMK #include "TestMessCreateBIO.h"
+//IMK #include "TestMessCreateEmail.h"
+//IMK #include "TestMessCreateBulkEmail.h"
+//IMK #include "TestMessCreateEMS.h"
+#include "TestMessCreateSMS.h"
+//IMK #include "TestMessCreateBulkSMS.h"
+//IMK #include "TestMessEntryCount.h"
+//IMK #include "TestMessSendEmail.h"
+//IMK #include "TestMessSendBulkEmail.h"
+//IMK #include "TestMessSendSms.h"
+//IMK #include "TestMessDeleteEmailImap.h"
+//IMK #include "TestMessDeleteEmailPop.h"
+//IMK #include "TestMessFullSyncImap.h"
+//IMK #include "TestMessReceiveEmailImap.h"
+//IMK #include "TestMessReceiveEmailPop.h"
+//IMK #include "TestMessOpen.h"
+//IMK #include "TestMessVerifyEntry.h"
+//IMK #include "TestMessReply.h"
+//IMK #include "TestMessForward.h"
+//IMK #include "TestMessCompareMessages.h"
+//IMK #include "TestMessSetSyncRateImap.h"
+//IMK #include "TestMessDeleteSharedData.h"
+#include "TestMessEditEntry.h"
+//IMK #include "TestMessSaveEmailAttachments.h"
+//IMK #include "TestMessDeleteFolder.h"
+//IMK #include "TestMessCreateFolder.h"
+//IMK #include "TestMessRenameFolder.h"
+//IMK #include "TestMessMoveMessages.h"
+//IMK #include "TestMessSearchMessage.h"
+//IMK #include "TestMessDeleteMessages.h"
+//IMK #include "TestMessScheduleSendSMS.h"
+//IMK #include "TestMessCancelScheduledSMS.h"
+//IMK #include "TestMessVerifyScheduleSMS.h"
+//IMK #include "TestMessBackupStore.h"
+//IMK #include "TestMessRestoreStore.h"
+//IMK #include "TestMessReceiveHeadersEmailPop.h"
+//IMK #if (defined _PLATTEST_CDMA_)
+//IMK #include "TestMessCreateCancelSms.h"
+//IMK #endif
+
+
+// EPOC includes
+#include <e32base.h>
+#include <es_sock.h>
+#include <smsuaddr.h>
+#include <test/testexecuteserverutils.h>
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+/*@}*/
+
+
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler*	sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(sched);
+	CTestMessServer*	server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTestMessServer::NewL());
+	if ( err==KErrNone )
+		{
+		// 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;
+		}
+#if (defined TRAP_IGNORE)
+	TRAP_IGNORE(MainL());
+#else
+	TRAPD(err,MainL());
+#endif
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+
+CTestMessServer* CTestMessServer::NewL()
+	{
+	CTestMessServer*	server=new(ELeave) CTestMessServer();
+	CleanupStack::PushL(server);
+	RProcess	handle = RProcess();
+	TParsePtrC	serverName(handle.FileName());
+	server->ConstructL(serverName.Name());
+	CleanupStack::Pop();
+	return server;
+	}
+
+CTestMessServer::CTestMessServer()
+:	CTestServer()
+,	iSharedData(NULL)
+	{
+	}
+
+void CTestMessServer::ConstructL(const TDesC& aName)
+	{
+	CTestServer::ConstructL(aName);
+	iSharedData=CTestMessSharedData::NewL();
+	}
+
+CTestMessServer::~CTestMessServer()
+	{
+	delete iSharedData;
+	iSharedData=NULL;
+	}
+
+CSession2* CTestMessServer::NewSessionL(const TVersion& /*aVersion*/,const RMessage2& /*aMessage*/) const
+/**
+ * @param RMessage - RMessage for the session open
+ * Secure version
+ */
+	{
+	CTestSession*	session = new (ELeave) CTestMessSession(iSharedData);
+	CONST_CAST(CTestMessServer*,this)->IncSessionCount();
+	return session;
+	}
+
+// constructor for ESOCK test suite
+// this creates all the ESOCK test steps and
+// stores them inside CTestSuiteEsock
+CTestStep* CTestMessServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestMessBase*	testStep = NULL;
+
+	if(aStepName == _L("CleanMessageFolder"))
+		{
+		testStep = new CTestMessCleanMessageFolder();
+		}
+	else if(aStepName == _L("CreateSms"))
+		{
+		testStep = new CTestMessCreateSMS();
+		}
+	else if(aStepName == _L("CreateSmsAccount"))
+		{
+		testStep = new CTestMessCreateSmsAccount();
+		}
+	else if(aStepName == _L("SetSmsSc"))
+		{
+		testStep = new CTestMessSetDefaultSc();
+		}
+	return testStep;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessSession.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,50 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "TestMessSession.h"
+
+CTestMessSession::CTestMessSession(CTestMessSharedData* aSharedData)
+:	CTestSession()
+,	iSharedData(aSharedData)
+	{
+	}
+
+
+void CTestMessSession::ServiceL(const RMessage2& aMessage)
+	{
+	CTestSession::ServiceL(aMessage);
+	switch(aMessage.Function())
+		{
+		case EOpenTestStep :
+			{
+			}
+			break;
+		case ERunTestStep :
+			{
+			iSharedData->DoProcessL();
+			}
+			break;
+		case EAbortTestStep :
+			{
+			}
+			break;
+		case ECloseTestStep :
+			{
+			}
+			break;
+		default:
+			break;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessSetDefaultSC.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,122 @@
+// 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"
+// which accompanies 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 contains TestMessSetDefaultSc which sets an SMS
+// SC as default SC.
+// 
+//
+
+#include "TestMessSetDefaultSC.h"
+
+// EPOC includes
+#include <msvids.h>
+#include <miutset.h>
+#include <smutset.h>
+#include <etelmm.h>
+#include <msvstore.h>
+#include <csmsaccount.h>
+
+_LIT(KSCName,		"scname");
+
+CTestMessSetDefaultSc::CTestMessSetDefaultSc()
+:	CTestMessBase(EFalse)
+	{
+	SetTestStepName(_L("SetSmsSc"));
+	}
+
+TVerdict CTestMessSetDefaultSc::doTestStepL()
+	{
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("Set Default Service Center"));
+
+	CSmsSettings*		smsSettings = CSmsSettings::NewL();
+	CleanupStack::PushL(smsSettings);
+	SetEntryL(KMsvRootIndexEntryId);
+
+	EntryL().SetSortTypeL(SelectionOrdering());
+	CMsvEntrySelection*	selection=EntryL().ChildrenWithTypeL(KUidMsvServiceEntry);
+	CleanupStack::PushL(selection);
+	TInt				count=selection->Count();
+	TBool				found=EFalse;
+	for (TInt i=count; i>0 && !found; )
+		{
+		SetEntryL(selection->At(--i));
+
+		//	Log child
+		if	(	EntryL().Entry().iMtm == KUidMsgTypeSMS &&
+				EntryL().Entry().iType == KUidMsvServiceEntry
+			)
+			{
+			found=ETrue;
+			}
+		}
+
+	if ( !found )
+		{
+		ERR_PRINTF1(_L("No SMS Account found"));
+		SetTestStepResult(EFail);
+		}
+
+	TName	network;
+//IMK	TBool	returnValue=(GetPhoneSmsNetworkL(network)==KErrNone);
+TBool	returnValue=false; //IMK
+	TPtrC	ptrSCName(network);
+
+	if ( !returnValue )
+		{
+		returnValue=GetStringFromConfig(ConfigSection(), KSCName, ptrSCName);
+		}
+	if ( !returnValue )
+		{
+		ERR_PRINTF1(_L("No SC specified in script/ini file"));
+		SetTestStepResult(EFail);
+		}
+
+	INFO_PRINTF2(_L("SC Name = %S"), &ptrSCName);
+
+	if ( TestStepResult()==EPass )
+		{
+		CSmsAccount*	smsAccount = CSmsAccount::NewLC();
+		smsAccount->LoadSettingsL(*smsSettings);
+		const TInt	numSCAddr = smsSettings->ServiceCenterCount();
+
+		if( !numSCAddr )
+			{
+			ERR_PRINTF1(_L("No SC found"));
+			SetTestStepResult(EFail);
+			}
+
+		TBool	scFound	= EFalse;
+		for( TInt index=0; (index<numSCAddr) && (!scFound);index++ )
+			{
+			CSmsServiceCenter&	scAddr = smsSettings->GetServiceCenter(index);
+			if( (scAddr.Name()).CompareF(ptrSCName) == 0)
+				{
+				smsSettings->SetDefaultServiceCenter(index);
+				smsAccount->SaveSettingsL(*smsSettings);
+				scFound = ETrue;
+				}
+			}
+
+		if ( !scFound )
+			{
+			ERR_PRINTF2(_L("%S NOT Found"), &ptrSCName);
+			SetTestStepResult(EFail);
+			}
+
+		CleanupStack::PopAndDestroy(smsAccount);
+		}
+	CleanupStack::PopAndDestroy(2, smsSettings);
+
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessSharedData.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,276 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 contains CTestMessSharedData
+// 
+//
+
+#include "TestMessSharedData.h"
+
+#include <mtclbase.h>
+#include <msvids.h>
+#include <e32std.h>
+#include <imapcmds.h>
+
+_LIT(KName,			"name");
+
+CTestMessSharedData* CTestMessSharedData::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.
+ */
+	{
+	CTestMessSharedData*	sharedData = new (ELeave) CTestMessSharedData();
+	CleanupStack::PushL(sharedData);
+	sharedData->ConstructL();
+	CleanupStack::Pop(sharedData);
+	return sharedData;
+	}
+
+CTestMessSharedData::CTestMessSharedData()
+:	CBase()
+,	iSession(NULL)
+,	iMtmRegistry(NULL)
+,	iList(NULL)
+,	iAnyPostStepToDo(NULL)
+,	iDeleteTestStep(EFalse)
+	{
+	}
+
+void CTestMessSharedData::ConstructL()
+	{
+	iSession=CMsvSession::OpenSyncL(*this);
+	iMtmRegistry=CClientMtmRegistry::NewL(*iSession);
+	}
+
+CTestMessSharedData::~CTestMessSharedData()
+	{
+	while ( iList != NULL )
+		{
+		CMsgEntry*	entry=iList;
+		iList=iList->iNext;
+		delete entry;
+		}
+	delete iMtmRegistry;
+	iMtmRegistry=NULL;
+	delete iSession;
+	iSession=NULL;
+	}
+
+void CTestMessSharedData::DoProcessL()
+	{
+	if ( iAnyPostStepToDo != NULL )
+		{
+		if (iDeleteTestStep)
+			{
+			iAnyPostStepToDo->DoCancelProcessL();
+			iDeleteTestStep=EFalse;
+			}
+		else
+			{
+			iAnyPostStepToDo->DoProcessL(*iMtmRegistry);
+			}
+		iAnyPostStepToDo=NULL;
+		}
+	}
+
+void CTestMessSharedData::IMAP4ConnectAndSyncCompleteAfterDisconnectL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep)
+	{
+	iList=CMsgIMAP4ConnectAndSyncComplete::NewL(aMtmId, aMsvId, aStep, iList);
+	iAnyPostStepToDo=iList;
+	}
+
+TInt CTestMessSharedData::DeleteEntryL(CTestStep& aStep)
+	{
+	TInt	ret=KErrNone;
+	TPtrC	name;
+
+	if ( !aStep.GetStringFromConfig(aStep.ConfigSection(), KName, name) )
+		{
+		aStep.ERR_PRINTF1(_L("Name not found"));
+		aStep.SetTestStepResult(EFail);
+		ret=KErrArgument;
+		}
+	else
+		{
+		aStep.INFO_PRINTF2(_L("Name : %S"), &name);
+
+		CMsgEntry*	msgParent=NULL;
+		CMsgEntry*	msgEntry=iList;
+		TBool		found=EFalse;
+
+		while ( (msgEntry!=NULL) && !found )
+			{
+			if ( msgEntry->iName.Compare(name) == 0 )
+				{
+				if ( msgParent!=NULL )
+					{
+					msgParent->iNext=msgEntry->iNext;
+					}
+				else
+					{
+					iList=msgEntry->iNext;
+					}
+				iDeleteTestStep=ETrue;
+				iAnyPostStepToDo=msgEntry;
+				found=ETrue;
+				}
+			else
+				{
+				msgParent=msgEntry;
+				msgEntry=msgEntry->iNext;
+				}
+			}
+
+		if ( !found )
+			{
+			aStep.ERR_PRINTF1(_L("Message Entry not found"));
+			aStep.SetTestStepResult(EFail);
+			ret=KErrNotFound;
+			}
+		}
+
+	return ret;
+	}
+
+CTestMessSharedData::CMsgEntry::CMsgEntry(CMsgEntry* aList)
+:	CActive(EPriorityStandard)
+,	iNext(aList)
+,	iReadyToBeDeleted(EFalse)
+	{
+	}
+
+void CTestMessSharedData::CMsgEntry::ConstructL(CTestStep& aStep)
+	{
+	TPtrC	name;
+
+	//	Read in name tag
+	if ( !aStep.GetStringFromConfig(aStep.ConfigSection(), KName, name) )
+		{
+		aStep.ERR_PRINTF1(_L("Name not found"));
+		aStep.SetTestStepResult(EFail);
+		}
+	else
+		{
+		aStep.INFO_PRINTF2(_L("Name : %S"), &name);
+		iName.Copy(name);
+		}
+	}
+
+CTestMessSharedData::CMsgEntry::~CMsgEntry()
+	{
+	}
+
+void CTestMessSharedData::CMsgEntry::DoCancel()
+	{
+	}
+
+void CTestMessSharedData::CMsgEntry::RunL()
+	{
+	iReadyToBeDeleted=ETrue;
+	}
+
+CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete* CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::NewL(TUid aMtmId, TMsvId aMsvId, CTestStep& aStep, CMsgEntry* aList)
+	{
+	CMsgIMAP4ConnectAndSyncComplete*	self= new (ELeave) CMsgIMAP4ConnectAndSyncComplete(aMtmId, aMsvId, aList);
+	CleanupStack::PushL(self);
+	self->ConstructL(aStep);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::CMsgIMAP4ConnectAndSyncComplete(TUid aMtmId, TMsvId aMsvId, CMsgEntry* aList)
+:	CMsgEntry(aList)
+,	iMtmId(aMtmId)
+,	iMsvId(aMsvId)
+,	iBaseMtm(NULL)
+,	iOperation(NULL)
+	{
+	}
+
+CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::~CMsgIMAP4ConnectAndSyncComplete()
+	{
+	if ( iOperation != NULL )
+		{
+		delete iOperation;
+		iOperation=NULL;
+		}
+	delete iBaseMtm;
+	iBaseMtm=NULL;
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::RunL()
+	{
+	CMsgEntry::RunL();
+	delete iOperation;
+	iOperation=NULL;
+	delete iBaseMtm;
+	iBaseMtm=NULL;
+
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::DoProcessL(CClientMtmRegistry& aMtmRegistry)
+	{
+	iBaseMtm=aMtmRegistry.NewMtmL(iMtmId);
+	CActiveScheduler::Add(this);
+
+	iBaseMtm->SwitchCurrentEntryL(iMsvId);
+	CMsvEntrySelection*	selection=new (ELeave) CMsvEntrySelection();
+	CleanupStack::PushL(selection);
+	selection->Reset();
+	selection->AppendL(iMsvId);
+	selection->AppendL(iMsvId);	// remote inbox
+
+	TPckg<MMsvImapConnectionObserver*>	parameter(this);
+	iOperation=iBaseMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndSyncCompleteAfterDisconnect, *selection, parameter, iStatus);
+	CleanupStack::PopAndDestroy(selection);
+	SetActive();
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::DoCancelProcessL()
+	{
+	if ( iOperation != NULL )
+		{
+		iOperation->Cancel();
+		}
+	}
+
+void CTestMessSharedData::CMsgIMAP4ConnectAndSyncComplete::HandleImapConnectionEvent(TImapConnectionEvent aConnectionEvent)
+	{
+	switch (aConnectionEvent)
+		{
+	/** Connecting to server. */
+	case EConnectingToServer:
+		break;
+	/** Synchronising folder list. */
+	case ESynchronisingFolderList:
+		break;
+	/** Synchronising inbox. */
+	case ESynchronisingInbox:
+		break;
+	/** Synchronising folders. */
+	case ESynchronisingFolders:
+		break;
+	/** Synchronisation complete. */
+	case ESynchronisationComplete:
+		break;
+	/** Disconnecting. */
+	case EDisconnecting:
+		break;
+	/** Connection completed. */
+	case EConnectionCompleted:
+		break;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessStoreProcessUtil.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,256 @@
+// 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"
+// which accompanies 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 contains CTestMessStoreProcessUtil. Base class process what is in the message store
+// 
+//
+
+/**
+ @file TestMessStoreProcessUtil.cpp
+*/
+
+#include "TestMessStoreProcessUtil.h"
+
+//	EPOC include
+#include <txtrich.h>
+
+/**
+ * @name Constant Literals used.
+ */
+/*@{*/
+// Literal constants used for the character set
+_LIT(KChineseGB2312,		"ChineseGB2312");
+_LIT(KChineseHz,			"ChineseHz");
+_LIT(KChineseBig5,			"ChineseBig5");
+/*@}*/
+
+CTestMessStoreProcessUtil::CTestMessStoreProcessUtil(CTestMessBase& aTestStep, TBool aReadOnly)
+:	CBase()
+,	iTestStep(aTestStep)
+,	iReadOnly(aReadOnly)
+	{
+	}
+
+/**
+ * Process the message entry
+ * @param  TMsvId aMsvId - Id of message to edit
+ * @return TInt - return TErrNone if all worked
+ *  
+*/
+TInt CTestMessStoreProcessUtil::ProcessEntryL(TMsvId aMsvId)
+	{
+	TInt		ret=KErrNone;
+	CMsvEntry*	msvEntry=iTestStep.Session().GetEntryL(aMsvId);
+	CleanupStack::PushL(msvEntry);
+
+	if ( msvEntry->HasStoreL() )
+		{
+		CMsvStore*	store=NULL;
+		if ( iReadOnly )
+			{
+			store=msvEntry->ReadStoreL();
+			}
+		else
+			{
+			store=msvEntry->EditStoreL();
+			}
+		CleanupStack::PushL(store);
+
+		RArray<TUid>	ids;
+		ids.Append(KUidMsgFileIMailHeader);
+		ids.Append(KUidMsgFileMimeHeader);
+		ids.Append(KUidMsgFileInternetAccessPreferences);
+		ids.Append(KUidMsvSMSHeaderStream);
+		ids.Append(KUidMsvDefaultServices);
+		ids.Append(KMsvEntryRichTextBody);
+		for ( TUint uidIndex=ids.Count(); uidIndex>0; )
+			{
+			TUid	uid=ids[--uidIndex];
+
+			if ( store->IsPresentL(uid) )
+				{
+				if ( uid==KUidMsgFileIMailHeader )
+					{
+					// Process the CImHeader info
+					ProcessImHeaderL(*store);
+					}
+				else if ( uid==KUidMsgFileMimeHeader )
+					{
+					// Process the CImMimeHeader info
+					ProcessImMimeHeaderL(*store);
+					}
+				else if ( uid==KUidMsgFileInternetAccessPreferences )
+					{
+					}
+				else if ( uid==KUidMsvSMSHeaderStream )
+					{
+					// Process the CSmsHeader info
+					ProcessSmsHeaderStreamL(*store);
+					}
+				else if ( uid==KUidMsvDefaultServices )
+					{
+					}
+				else if ( uid==KMsvEntryRichTextBody )
+					{
+					// Process the CRichText info
+					ProcessRichTextBodyL(*store);
+					}
+				else
+					{
+					iTestStep.INFO_PRINTF2(_L("Cannot process %x"), uid.iUid);
+					}
+				}
+			}
+
+		// Commit to the store
+		if ( !iReadOnly )
+			{
+			store->CommitL();
+			}
+		CleanupStack::PopAndDestroy(store);
+		}
+
+	CleanupStack::PopAndDestroy(msvEntry);
+
+	return ret;
+	}
+
+// Process the CImHeader information
+void CTestMessStoreProcessUtil::ProcessImHeaderL(CMsvStore& aStore)
+	{
+	CImHeader*	header=CImHeader::NewLC();
+	TRAPD(err, header->RestoreL(aStore));
+
+	if ( err==KErrNone )
+		{
+		ProcessImHeaderL(*header);
+		if ( !iReadOnly )
+			{
+			header->StoreL(aStore);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(header);
+	}
+
+// Process the CImMimeHeader information
+void CTestMessStoreProcessUtil::ProcessImMimeHeaderL(CMsvStore& aStore)
+	{
+	CImMimeHeader*	header=CImMimeHeader::NewLC();
+	TRAPD(err, header->RestoreL(aStore));
+
+	if ( err==KErrNone )
+		{
+		ProcessImMimeHeaderL(*header);
+		if ( !iReadOnly )
+			{
+			header->StoreL(aStore);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(header);
+	}
+
+
+// Process the CSmsHeader information
+void CTestMessStoreProcessUtil::ProcessSmsHeaderStreamL(CMsvStore& aStore)
+	{
+	CParaFormatLayer*	paraFormatLayer=CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+
+	CCharFormatLayer*	charFormatLayer=CCharFormatLayer::NewL(); 
+	CleanupStack::PushL(charFormatLayer);
+
+	CRichText*			bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(bodyText);
+
+	CSmsHeader*			header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *bodyText);
+	CleanupStack::PushL(header);
+
+	TRAPD(err, header->RestoreL(aStore));
+	if ( err == KErrNone )
+		{
+		ProcessSmsHeaderStreamL(*header);
+		if ( !iReadOnly )
+			{
+			header->StoreL(aStore);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(4, paraFormatLayer);
+	}
+
+
+// Process the CRichText information
+void CTestMessStoreProcessUtil::ProcessRichTextBodyL(CMsvStore& aStore)
+	{
+	CParaFormatLayer*	paraFormatLayer=CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+
+	CCharFormatLayer*	charFormatLayer=CCharFormatLayer::NewL(); 
+	CleanupStack::PushL(charFormatLayer);
+
+	CRichText*			bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(bodyText);
+
+	TRAPD(err, aStore.RestoreBodyTextL(*bodyText));
+	if ( err == KErrNone )
+		{
+		ProcessRichTextBodyL(*bodyText);
+		if ( !iReadOnly )
+			{
+			aStore.StoreBodyTextL(*bodyText);
+			}
+		}
+
+	CleanupStack::PopAndDestroy(3, paraFormatLayer);
+	}
+
+/**
+ * Saves the new character set to the message 
+ * @param  TPtrC aCharacterSetType - New Character set type to be stored for the received message
+ * @param  TUint &aCharSetVal - character set value
+ * @return TBool 
+ * @panic None
+ * @leave None
+ *
+*/
+TBool CTestMessStoreProcessUtil::ValidCharacterSetInfo(const TPtrC& aCharacterSetType, TUint &aCharSetVal)
+	{
+	TBool	hasSet = ETrue;
+
+	if ( aCharacterSetType.Compare(KChineseGB2312) == 0 )
+		{
+		iTestStep.INFO_PRINTF1(_L("Character set set to Chinese GB2312"));
+		aCharSetVal =  KCharacterSetIdentifierGb2312;
+		}
+	else if (aCharacterSetType.Compare(KChineseHz) == 0)
+		{
+		iTestStep.INFO_PRINTF1(_L("Character set set to Chinese Hz"));
+		aCharSetVal = KCharacterSetIdentifierHz;
+		}
+	else if ( aCharacterSetType.Compare(KChineseBig5) == 0 )
+		{
+		iTestStep.INFO_PRINTF1(_L("Character set set to Chinese Big5"));
+		aCharSetVal = KCharacterSetIdentifierBig5;
+		}
+	else
+		{
+		// To be updated later
+		hasSet= EFalse;
+		iTestStep.ERR_PRINTF2(_L("Character not supported in test code: %S"), &aCharacterSetType);
+		iTestStep.SetTestStepResult(EFail);
+		}
+
+	return hasSet;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessTimer.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,63 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestMessTimer.h
+// This contains CTestMessTimer
+// EPOC includes
+// 
+//
+
+#include "TestMessTimer.h"
+#include "TestMessProcessor.h"
+
+//
+// Construction/Destruction
+//
+
+CTestMessTimer* CTestMessTimer::NewL(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor)
+	{
+	CTestMessTimer*	self=new(ELeave) CTestMessTimer(aInterval, aProcessor);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestMessTimer::CTestMessTimer(TTimeIntervalMicroSeconds32 aInterval, CTestMessProcessor& aProcessor)
+: CTimer(EPriorityStandard)
+, iInterval(aInterval)
+, iProcessor(aProcessor)
+	{
+	}
+
+void CTestMessTimer::ConstructL()
+	{
+	CTimer::ConstructL();
+	CActiveScheduler::Add(this);
+	}
+
+
+CTestMessTimer::~CTestMessTimer()
+	{
+	}
+
+void CTestMessTimer::RunL()
+	{
+	iProcessor.DisplayProgress();
+	IssueRequest();
+	};
+
+void CTestMessTimer::IssueRequest()
+	{
+	After(iInterval);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/Src/TestMessWatcher.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,73 @@
+// 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"
+// which accompanies 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 contains CTestMessWatcher which starts the message watchers
+// 
+//
+
+#include "TestMessWatcher.h"
+
+_LIT(KWatcherExe, "z:\\system\\libs\\watcher.exe");
+
+CTestMessWatcher* CTestMessWatcher::NewL(TInt aPriority)
+	{
+	CTestMessWatcher* self = new (ELeave) CTestMessWatcher(aPriority);
+	CleanupStack::PushL(self);
+
+	self->ConstructL();
+
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestMessWatcher::~CTestMessWatcher()
+	{
+	Cancel();
+	iTimer.Close();
+	if (iConstructed)
+		iWatcher.Kill(KErrNone);
+
+	iWatcher.Close();
+	}
+
+CTestMessWatcher::CTestMessWatcher(TInt aPriority)
+:	CActive(aPriority)
+,	iConstructed(EFalse)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CTestMessWatcher::ConstructL()
+	{
+	TInt	ret=iWatcher.Create(KWatcherExe, KNullDesC);
+	switch ( ret )
+		{
+	case KErrNone:
+		iWatcher.Resume();
+		iConstructed = ETrue;
+	case KErrAlreadyExists:
+		break;
+	default:
+		User::Leave(ret);
+		}
+	}
+
+void CTestMessWatcher::RunL()
+	{
+	}
+
+void CTestMessWatcher::DoCancel()
+	{
+	iTimer.Cancel();
+	iStatus=KErrCancel;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/TestData/Smoketest_Mess.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,751 @@
+[default]
+smsto=07769588944
+smsbearer=NBS
+smsencoding=7
+smsDeliveryReport=NO
+mmsto=07769588944
+mmsDeliveryReport=NO
+progress=120
+
+[19101_RootFolder]
+depth=0
+
+[27030_SmsO2Account]
+scname=O2
+scnumber=+447802000332
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[27031_SmsOrangeAccount]
+scname=Orange
+scnumber=+447973100973
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[27032_SmsTMobileAccount]
+scname=TMobile
+scnumber=+447958879879
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[27029_SmsVodafoneAccount]
+scname=Vodafone
+scnumber=+447785016005
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[21770_SmsAirtelAccount]
+MessageBearerType=CDMA
+scname=Airtel
+scnumber=919845087001
+SmsRejectDuplicate=TRUE
+SmsReplyPath=TRUE
+SmsConCatenate=TRUE
+SmsDeliveryReport=TRUE
+SmsReplyQuoted=TRUE
+
+[SmsHutchAccount]
+scname=Hutch
+scnumber=919886005444
+SmsReplyQuoted=TRUE
+SmsRejectDuplicate=TRUE
+SmsReplyPath=FALSE
+SmsConCatenate=TRUE
+SmsDeliveryReport=FALSE
+
+[28206_MmsAccount]
+accountname=Multimedia Messaging
+serveraddr=http://10.22.64.20
+fromaddr=07769588944
+automaticfetch=TRUE
+iap=14
+
+[27028_ImapAccount]
+accountname=smoketest Imap Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.dial.pipex.com
+inserver=imap.dial.pipex.com
+SyncRate=120
+iap=6
+
+[27027_PopAccount]
+accountname=smoketest Pop Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.dial.pipex.com
+inserver=pop.dial.pipex.com
+iap=6
+
+[21558_ImapAccountAuth]
+accountname=smoketest ImapAuth Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[27035_PopAccountAuth]
+accountname=smoketest PopAuth Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[28381_ImapAccountSSL]
+accountname=smoketest ImapSSL Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+sslwrapper=yes
+sslport=993
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[28382_PopAccountSSL]
+accountname=smoketest PopSSL Account
+myname=Symbian smoketest
+username=mailtst1
+password=mailtest1
+auth=TRUE
+sslwrapper=yes
+sslport=995
+authUserName=mailtst1
+authPassword=mailtest1
+emailaddress=mailtst1@trmai01.it.cellulardata.com
+outserver=trmai01.it.cellulardata.com
+inserver=cyrus.cellulardata.com
+iap=7
+
+[27027_VodafoneGprsAccount]
+accountname=Vodafone Gprs Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.vizzavi.co.uk
+inserver=pop.dial.pipex.com
+iap=13
+
+[o2GprsAccount]
+accountname=O2 Gprs Account
+myname=Symbian smoketest
+username=mdgi15
+password=vethihiz
+emailaddress=mdgi15@dial.pipex.com
+outserver=smtp.o2.co.uk
+inserver=pop.dial.pipex.com
+iap=17
+
+[MmsCount01]
+count=7
+depth=2
+folder1=Local
+folder2=Inbox
+
+[MmsMessage01]
+from=Multimedia Messaging
+subject=mms test1
+priority=high
+
+textmimetype1=text/plain
+textfile1=c:\smoketest\Mms\Message1.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+[MmsMessage02]
+from=Multimedia Messaging
+subject=mms test2
+priority=high
+   
+textmimetype1=text/plain
+textfile1=c:\smoketest\Mms\Message2.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype1=image/gif
+imgfile1=c:\smoketest\Mms\Image2.gif
+imgmimeheaders1=1
+imgmimeheader1name1=content-type
+imgmimeheader1type1=image/gif
+
+[MmsMessage03]
+from=Multimedia Messaging
+subject=mms test3
+priority=high
+
+textmimetype1=text/plain
+textfile1=c:\smoketest\Mms\Message3.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype1=image/gif
+imgfile1=c:\smoketest\Mms\Image3.gif
+imgmimeheaders1=1
+imgmimeheader1name1=content-type
+imgmimeheader1type1=image/gif
+
+audiomimetype1=audio/basic
+audiofile1=c:\smoketest\Mms\Audio3.wav
+audiomimeheaders1=1
+audiomimeheader1name1=content-type
+audiomimeheader1type1=audio/basic
+
+[MmsMessage04]
+from=Multimedia Messaging
+subject=mms test4
+priority=high
+slides=2
+
+textmimetype1=text/plain
+textfile1=c:\smoketest\Mms\Message4.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype2=image/gif
+imgfile2=c:\smoketest\Mms\Image4.gif
+imgmimeheaders2=1
+imgmimeheader2name1=content-type
+imgmimeheader2type1=image/gif
+
+[MmsMessage05]
+from=Multimedia Messaging
+subject=mms test5
+priority=high
+slides=2
+
+textmimetype1=text/plain
+textfile1=c:\smoketest\Mms\Message5.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+imgmimetype2=image/gif
+imgfile2=c:\smoketest\Mms\Image5.gif
+imgmimeheaders2=1
+imgmimeheader2name1=content-type
+imgmimeheader2type1=image/gif
+
+audiomimetype2=audio/basic
+audiofile2=c:\smoketest\Mms\Audio5.wav
+audiomimeheaders2=1
+audiomimeheader2name1=content-type
+audiomimeheader2type1=audio/basic
+
+[MmsMessage06]
+from=Multimedia Messaging
+subject=mms test6
+priority=high
+slides=3
+
+textmimetype1=text/plain
+textfile1=c:\smoketest\Mms\Message6.txt
+textmimeheaders1=1
+textmimeheader1name1=content-type
+textmimeheader1type1=text/plain
+
+audiomimetype2=audio/basic
+audiofile2=c:\smoketest\Mms\Audio6.wav
+audiomimeheaders2=1
+audiomimeheader2name1=content-type
+audiomimeheader2type1=audio/basic
+
+imgmimetype3=image/gif
+imgfile3=c:\smoketest\Mms\Image6.gif
+imgmimeheaders3=1
+imgmimeheader3name1=content-type
+imgmimeheader3type1=image/gif
+
+[27584_SmsMessage01]
+recipients=2
+body=c:\smoketest\Sms\Message1.txt
+
+[27596_SmsMessage02]
+body=c:\smoketest\Sms\Message2.txt
+
+[27587_SmsMessage03]
+body=c:\smoketest\Sms\Message3.txt
+encoding=8
+
+[27589_SmsMessage04]
+body=c:\smoketest\Sms\Message4.txt
+DeliveryReport=NO
+
+[27591_SmsMessage05]
+body=c:\smoketest\Sms\Message5.txt
+
+[27593_SmsMessage06]
+body=c:\smoketest\Sms\Message6.txt
+encoding=8
+scheduled=120
+
+[27577_SmsSend01]
+text=This message is going
+
+[20388_SmsSend02]
+text=Hello, this is a plain
+
+[20389_SmsSend03]
+text=Hello, this is a 8-bit
+
+[20390_SmsSend04]
+text=No status report requested
+
+[20392_SmsSend05]
+text=A big message to ya!
+
+[20391_SmsSend06]
+text=This is a big 8-bit
+
+[27595_SmsCount01]
+count=7
+depth=2
+folder1=Local
+folder2=Inbox
+
+[27033_PopMessage01]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage01
+body=c:\smoketest\EMail\PopTestMsg01.txt
+priority=high
+count=1
+depth=2
+folder1=smoketest Pop Account
+folder2=PopMessage01
+
+[27044_PopMessage02]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage02
+body=c:\smoketest\EMail\PopTestMsg02.txt
+priority=low
+attachments=1
+attachment1=c:\smoketest\EMail\Attachment01.txt
+count=2
+depth=3
+folder1=smoketest Pop Account
+folder2=PopMessage02
+
+[27040_PopMessage03]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage03
+body=c:\smoketest\EMail\PopTestMsg03.txt
+priority=low
+attachments=3
+attachment1=c:\smoketest\EMail\Attachment02.txt
+attachment2=c:\smoketest\EMail\Attachment02.txt
+attachment3=c:\smoketest\EMail\Attachment02.txt
+count=4
+depth=3
+folder1=smoketest Pop Account
+folder2=PopMessage03
+
+[19103_PopMessage04]
+from=smoketest Pop Account
+to=mdgi15@dial.pipex.com
+subject=PopMessage04
+body=c:\smoketest\EMail\PopTestMsg04.txt
+priority=low
+attachments=2
+attachment1=c:\smoketest\EMail\Attachment01.txt
+attachment2=c:\smoketest\EMail\Typhoon.zip
+count=3
+depth=3
+folder1=smoketest Pop Account
+folder2=PopMessage04
+
+[27041_PopBox01]
+from=smoketest Pop Account
+
+[28111_PopSend01]
+subject=PopMessage01
+
+[28112_PopSend02]
+subject=PopMessage02
+
+[28114_PopSend03]
+subject=PopMessage03
+
+[28113_PopSend04]
+subject=PopMessage04
+
+[19102_PopCount01]
+count=4
+depth=1
+folder1=smoketest Pop Account
+
+[19102_PopCount01_MadcowSanity]
+count=3
+depth=1
+folder1=smoketest Pop Account
+
+[28360_ImapMessage01]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage01
+body=c:\smoketest\EMail\PopTestMsg01.txt
+priority=high
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage01
+
+[28361_ImapMessage02]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage02
+body=c:\smoketest\EMail\PopTestMsg02.txt
+priority=low
+attachments=1
+attachment1=c:\smoketest\EMail\Attachment01.txt
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage02
+
+[28362_ImapMessage03]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage03
+body=c:\smoketest\EMail\PopTestMsg03.txt
+priority=low
+attachments=3
+attachment1=c:\smoketest\EMail\Attachment02.txt
+attachment2=c:\smoketest\EMail\Attachment02.txt
+attachment3=c:\smoketest\EMail\Attachment02.txt
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage03
+
+[28363_ImapMessage04]
+from=smoketest Imap Account
+to=mdgi15@dial.pipex.com
+subject=ImapMessage04
+body=c:\smoketest\EMail\PopTestMsg04.txt
+priority=low
+attachments=2
+attachment1=c:\smoketest\EMail\Attachment01.txt
+attachment2=c:\smoketest\EMail\Typhoon.zip
+count=0
+depth=3
+folder1=smoketest Imap Account
+folder2=Inbox
+folder3=ImapMessage04
+
+[19104_ImapBox01]
+name=imapsync
+from=smoketest Imap Account
+depth=1
+folder1=Inbox
+
+[28118_ImapSend01]
+subject=ImapMessage01
+
+[28117_ImapSend02]
+subject=ImapMessage02
+
+[28115_ImapSend03]
+subject=ImapMessage03
+
+[28116_ImapSend04]
+subject=ImapMessage04
+
+[28359_ImapCount01]
+count=4
+depth=2
+folder1=smoketest Imap Account
+folder2=Inbox
+
+[28359_ImapCount01MadcowSanity]
+count=3
+depth=2
+folder1=smoketest Imap Account
+folder2=Inbox
+
+[27048_PopMessage06]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage06
+body=c:\smoketest\EMail\PopTestMsg06.txt
+priority=high
+count=1
+depth=2
+folder1=smoketest PopAuth Account
+folder2=PopMessage06
+
+[28364_PopMessage07]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage07
+body=c:\smoketest\EMail\PopTestMsg07.txt
+priority=low
+attachments=1
+attachment1=c:\smoketest\EMail\Attachment01.txt
+count=2
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage07
+
+[28365_PopMessage08]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage08
+body=c:\smoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\smoketest\EMail\Attachment02.txt
+attachment2=c:\smoketest\EMail\Attachment02.txt
+attachment3=c:\smoketest\EMail\Attachment02.txt
+count=4
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage08
+
+[28366_PopMessage09]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage09
+body=c:\smoketest\EMail\PopTestMsg09.txt
+priority=low
+attachments=2
+attachment1=c:\smoketest\EMail\Attachment01.txt
+attachment2=c:\smoketest\EMail\Typhoon.zip
+count=3
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage09
+
+[28394_PopMessage10]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage10
+body=c:\smoketest\EMail\PopTestMsg06.txt
+priority=high
+count=1
+depth=2
+folder1=smoketest PopAuth Account
+folder2=PopMessage10
+
+[28395_PopMessage11]
+from=smoketest PopAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=PopMessage11
+body=c:\smoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\smoketest\EMail\Attachment02.txt
+attachment2=c:\smoketest\EMail\Attachment02.txt
+attachment3=c:\smoketest\EMail\Attachment02.txt
+count=4
+depth=3
+folder1=smoketest PopAuth Account
+folder2=PopMessage11
+
+[27043_PopBox02]
+from=smoketest PopAuth Account
+
+[21560_PopSend06]
+subject=PopMessage06
+
+[27042_PopSend07]
+subject=PopMessage07
+
+[27039_PopSend08]
+subject=PopMessage08
+
+[28367_PopSend09]
+subject=PopMessage09
+
+[28396_PopSend10]
+subject=PopMessage10
+
+[28397_PopSend11]
+subject=PopMessage11
+
+[28368_PopCount02]
+count=4
+depth=1
+folder1=smoketest PopAuth Account
+
+[28373_ImapMessage06]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage06
+body=c:\smoketest\EMail\PopTestMsg06.txt
+priority=high
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage06
+
+[28374_ImapMessage07]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage07
+body=c:\smoketest\EMail\PopTestMsg07.txt
+priority=low
+attachments=1
+attachment1=c:\smoketest\EMail\Attachment01.txt
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage07
+
+[28375_ImapMessage08]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage08
+body=c:\smoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\smoketest\EMail\Attachment02.txt
+attachment2=c:\smoketest\EMail\Attachment02.txt
+attachment3=c:\smoketest\EMail\Attachment02.txt
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage08
+
+[28376_ImapMessage09]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage09
+body=c:\smoketest\EMail\PopTestMsg09.txt
+priority=low
+attachments=2
+attachment1=c:\smoketest\EMail\Attachment01.txt
+attachment2=c:\smoketest\EMail\Typhoon.zip
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage09
+
+[28387_ImapMessage10]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage10
+body=c:\smoketest\EMail\PopTestMsg06.txt
+priority=high
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage10
+
+[28388_ImapMessage11]
+from=smoketest ImapAuth Account
+to=mailtst1@trmai01.it.cellulardata.com
+subject=ImapMessage11
+body=c:\smoketest\EMail\PopTestMsg08.txt
+priority=low
+attachments=3
+attachment1=c:\smoketest\EMail\Attachment02.txt
+attachment2=c:\smoketest\EMail\Attachment02.txt
+attachment3=c:\smoketest\EMail\Attachment02.txt
+count=0
+depth=3
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+folder3=ImapMessage11
+
+[27037_ImapBox02]
+from=smoketest ImapAuth Account
+depth=1
+folder1=Inbox
+
+[27036_ImapSend06]
+subject=ImapMessage06
+
+[28377_ImapSend07]
+subject=ImapMessage07
+
+[28378_ImapSend08]
+subject=ImapMessage08
+
+[28379_ImapSend09]
+subject=ImapMessage09
+
+[28389_ImapSend10]
+subject=ImapMessage10
+
+[28390_ImapSend11]
+subject=ImapMessage11
+
+[28380_ImapCount02]
+count=4
+depth=2
+folder1=smoketest ImapAuth Account
+folder2=Inbox
+
+[28398_PopBox03]
+from=smoketest PopSSL Account
+
+[28399_PopCount03]
+count=2
+depth=1
+folder1=smoketest PopSSL Account
+
+[28391_ImapBox03]
+from=smoketest ImapSSL Account
+depth=1
+folder1=Inbox
+
+[28392_ImapCount03]
+count=2
+depth=2
+folder1=smoketest ImapSSL Account
+folder2=Inbox
+
+[28383_HangUpPipex]
+iap=6
+
+[28384_HangUpNokia]
+iap=7
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/TestData/Sms/Message1.txt	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1 @@
+This message is going to my two buddies
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/messaging/bwins/SMOKETEST_MESS_SERVERU.DEF	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+	?NewServer@@YAHXZ @ 1 NONAME ; int __cdecl NewServer(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/smoketest_commdb.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,2022 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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 the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+
+ Contributors:
+
+ Description:
+ CommDB Settings File
+ All Rights Reserved
+
+-->
+
+
+
+<CommDB:Config xmlns="SymbianOS.Generic.Comms-Infras.CommDB"
+               xmlns:CommDB="SymbianOS.Generic.Comms-Infras.CommDB"
+               xmlns:xlink="http://www.w3.org/1999/xlink"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="SymbianOS.Generic.Comms-Infras.CommDB CommDB.xsd">
+
+<InformationTable>
+</InformationTable>
+
+<NetworkTable>
+    <Network operation="add">
+        <Name>Intranet</Name>
+    </Network>
+    <Network operation="add">
+        <Name>mRouter</Name>
+    </Network>
+</NetworkTable>
+
+<IAPTable>
+ 	 	<IAP operation="add">
+ 		<Name>Ethernet WinTAP</Name>
+ 		<IAPService>LANService.Ethernet WinTAP</IAPService>
+ 		<IAPBearer>LANBearer.Ethernet WinTAP</IAPBearer>
+ 		<IAPNetwork>Network.Intranet</IAPNetwork>
+ 		<IAPNetworkWeighting>0</IAPNetworkWeighting>
+ 		<LocationRef>Location.Office</LocationRef>
+ 	</IAP>
+    <IAP operation="add">
+        <Name>NT RAS with Null Modem</Name>
+        <IAPService>DialOutISP.NT RAS</IAPService>
+        <IAPBearer>ModemBearer.Null Modem 115200bps</IAPBearer>
+        <IAPNetwork>Network.Intranet</IAPNetwork>
+        <IAPNetworkWeighting>0</IAPNetworkWeighting>
+        <LocationRef>Location.Office</LocationRef>
+    </IAP>
+    <IAP operation="add">
+        <Name>Ethernet with DHCP</Name>
+        <IAPService>LANService.Ethernet Dynamic IP</IAPService>
+        <IAPBearer>LANBearer.EKA1 Emulator Ethernet</IAPBearer>
+        <IAPNetwork>Network.Intranet</IAPNetwork>
+        <IAPNetworkWeighting>0</IAPNetworkWeighting>
+        <LocationRef>Location.Office</LocationRef>
+    </IAP>
+</IAPTable>
+
+<ModemBearerTable>
+    <ModemBearer operation="template">
+        <Name>Default Modem</Name>
+        <Agent>CSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>0</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>Null Modem 115200bps</Name>
+        <Agent>CSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>52</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>TRUE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>US Robotics Sportster</Name>
+        <Agent>CSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>57600</Rate>
+        <Handshaking>244</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>AFTERDIALUNTILANSWER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT&amp;F1</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT&amp;d2</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>Dacom Surfer</Name>
+        <Agent>CSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>57600</Rate>
+        <Handshaking>244</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>AFTERDIALUNTILANSWER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT&amp;F</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT&amp;d2</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>GSM Mobile Phone via Infrared</Name>
+        <Agent>CSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>IRCOMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>IRCOMM</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>196</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>17</XonChar>
+        <XoffChar>19</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>ATZ</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>GSM Mobile Phone via Serial</Name>
+        <Agent>CSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>19200</Rate>
+        <Handshaking>196</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>17</XonChar>
+        <XoffChar>19</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>ATZ</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>GPRS Ericsson R520m via IR</Name>
+        <Agent>PSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>IRCOMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>IRCOMM</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>4</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>17</XonChar>
+        <XoffChar>19</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>ATZ</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>GPRS Ericsson R520m/T68i via Serial</Name>
+        <Agent>PSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>19200</Rate>
+        <Handshaking>4</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>17</XonChar>
+        <XoffChar>19</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>ATZ</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <IspInitString>*99***1#</IspInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>GPRS Motorola Mobile Phone via Serial</Name>
+        <Agent>PSD.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>57600</Rate>
+        <Handshaking>4</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>17</XonChar>
+        <XoffChar>19</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>ATZ</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>WinTunnel Modem</Name>
+        <Agent>null.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::6</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>52</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>180</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>30</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>60</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>mRouterWinsBearer</Name>
+        <Agent>mRouterAgent.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>WINS::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>WINSCSY</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>52</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>9999</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>180</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>30</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>mRouterRs232Bearer</Name>
+        <Agent>mRouterAgent.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>COMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECUART</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>52</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>9999</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>180</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>30</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>mRouterIrBearer</Name>
+        <Agent>mRouterAgent.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>IRCOMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>IRCOMM</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>52</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>9999</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>180</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>30</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>mRouterBtBearer</Name>
+        <Agent>mRouterAgent.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>BTCOMM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>BTCOMM</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>52</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>9999</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>180</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>30</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+    <ModemBearer operation="add">
+        <Name>mRouterUsbBearer</Name>
+        <Agent>mRouterAgent.agt</Agent>
+        <IfName>PPP</IfName>
+        <PortName>ACM::0</PortName>
+        <TSYName>MM</TSYName>
+        <CSYName>ECACM</CSYName>
+        <DataBits>8</DataBits>
+        <StopBits>1</StopBits>
+        <Parity>NONE</Parity>
+        <Rate>115200</Rate>
+        <Handshaking>52</Handshaking>
+        <SpecialRate>0</SpecialRate>
+        <XonChar>0</XonChar>
+        <XoffChar>0</XoffChar>
+        <FaxClassPref>AUTO</FaxClassPref>
+        <SpeakerPref>NEVER</SpeakerPref>
+        <SpeakerVolPref>QUIET</SpeakerVolPref>
+        <ModemInitString>AT</ModemInitString>
+        <DataInitString>AT</DataInitString>
+        <FaxInitString>AT</FaxInitString>
+        <DialPauseLength>S8=</DialPauseLength>
+        <SpeakerVolContorlLow>L0</SpeakerVolContorlLow>
+        <SpeakerVolControlMedium>L1</SpeakerVolControlMedium>
+        <SpeakerVolControlHigh>L2</SpeakerVolControlHigh>
+        <SpeakerAlwaysOff>M0</SpeakerAlwaysOff>
+        <SpeakerOnUntilCarrier>M1</SpeakerOnUntilCarrier>
+        <SpeakerAlwaysOn>M2</SpeakerAlwaysOn>
+        <SpeakerOnAfterUntilCarrier>M3</SpeakerOnAfterUntilCarrier>
+        <DialToneWaitModifier>W</DialToneWaitModifier>
+        <CallProgress1>X1</CallProgress1>
+        <CallProgress2>X2</CallProgress2>
+        <CallProgress3>X3</CallProgress3>
+        <CallProgress4>X4</CallProgress4>
+        <EchoOff>E0</EchoOff>
+        <VerboseText>V1</VerboseText>
+        <QuietOff>Q0</QuietOff>
+        <QuietOn>Q1</QuietOn>
+        <DialCommandStateModifier>;</DialCommandStateModifier>
+        <OnLine>O</OnLine>
+        <ResetConfiguration>Z</ResetConfiguration>
+        <ReturnToFactoryDefs>&amp;F</ReturnToFactoryDefs>
+        <DCDOnDuringLink>&amp;C1</DCDOnDuringLink>
+        <DTRHangUp>&amp;D2</DTRHangUp>
+        <DSRAlwaysOn>&amp;S0</DSRAlwaysOn>
+        <RTSCTSHandshake>&amp;K3</RTSCTSHandshake>
+        <XonXoffHandshake>&amp;K4</XonXoffHandshake>
+        <EscapeCharacter>+</EscapeCharacter>
+        <EscapeGuardPeriod>S12</EscapeGuardPeriod>
+        <NoDialTone>NO DIAL TONE</NoDialTone>
+        <Busy>BUSY</Busy>
+        <NoAnswer>NO ANSWER</NoAnswer>
+        <Carrier>CARRIER</Carrier>
+        <Connect>CONNECT</Connect>
+        <CompressionClass5>COMPRESSION:CLASS 5</CompressionClass5>
+        <CompressionV42bis>COMPRESSION:V.42 bis</CompressionV42bis>
+        <CompressionNone>COMPRESSION:NONE</CompressionNone>
+        <ProtocolLAPD>PROTOCOL:LAPD</ProtocolLAPD>
+        <ProtocolALT>PROTOCOL:ALT</ProtocolALT>
+        <ProtocolALTCELLULAR>PROTOCOL:ALT-CELLULAR</ProtocolALTCELLULAR>
+        <ProtocolNone>PROTOCOL:NONE</ProtocolNone>
+        <MessageCentreNumber>+44123456789</MessageCentreNumber>
+        <MessageValidityPeriod>1440</MessageValidityPeriod>
+        <MessageDeliveryReport>FALSE</MessageDeliveryReport>
+        <MinimumSignalLevel>9905</MinimumSignalLevel>
+        <LastSocketActivityTimeout>9999</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>180</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>30</LastSocketClosedTimeout>
+        <SIRSettings>0</SIRSettings>
+        <CommRole>0</CommRole>
+    </ModemBearer>
+</ModemBearerTable>
+
+<LANBearerTable>
+	<LANBearer operation="add">
+		<Name>Ethernet WinTAP</Name>
+		<Agent>nullagt.agt</Agent>
+		<IfName>ethint</IfName>
+		<LDDFilename>enet</LDDFilename>
+		<LDDName>=Ethernet</LDDName>
+		<PDDFilename>ethertap</PDDFilename>
+		<PDDName>Ethertap.Wins</PDDName>
+		<PacketDriverName>EtherPkt.drv</PacketDriverName>
+		<LastSocketActivityTimeout>-1</LastSocketActivityTimeout>
+		<LastSessionClosedTimeout>-1</LastSessionClosedTimeout>
+		<LastSocketClosedTimeout>-1</LastSocketClosedTimeout>
+    </LANBearer>
+    <LANBearer operation="add">
+        <Name>EKA1 Target Ethernet</Name>
+        <Agent>nullagt.agt</Agent>
+        <IfName>ethint</IfName>
+        <LDDFilename>ethercard</LDDFilename>
+        <LDDName>EtherCard</LDDName>
+        <PDDFilename>EtherSmc</PDDFilename>
+        <PDDName>EtherCard.Smc</PDDName>
+        <PacketDriverName>EtherPkt.drv</PacketDriverName>
+        <LastSocketActivityTimeout>-1</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>-1</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>-1</LastSocketClosedTimeout>
+    </LANBearer>
+    <LANBearer operation="add">
+        <Name>EKA1 Emulator Ethernet</Name>
+        <Agent>nullagt.agt</Agent>
+        <IfName>ethint</IfName>
+        <LDDFilename>ethercard</LDDFilename>
+        <LDDName>Ethercard</LDDName>
+        <PDDFilename>etherwins</PDDFilename>
+        <PDDName>Ethercard.wins</PDDName>
+        <PacketDriverName>EtherPkt.drv</PacketDriverName>
+        <LastSocketActivityTimeout>-1</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>-1</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>-1</LastSocketClosedTimeout>
+    </LANBearer>
+    <LANBearer operation="add">
+        <Name>EKA1 WINTAP Ethernet</Name>
+        <Agent>nullagt.agt</Agent>
+        <IfName>ethint</IfName>
+        <LDDFilename>ethercard</LDDFilename>
+        <LDDName>Ethercard</LDDName>
+        <PDDFilename>ethertap</PDDFilename>
+        <PDDName>Ethertap.wins</PDDName>
+        <PacketDriverName>EtherPkt.drv</PacketDriverName>
+        <LastSocketActivityTimeout>-1</LastSocketActivityTimeout>
+        <LastSessionClosedTimeout>-1</LastSessionClosedTimeout>
+        <LastSocketClosedTimeout>-1</LastSocketClosedTimeout>
+    </LANBearer>
+</LANBearerTable>
+
+<LANServiceTable>
+	<LANService operation="add">
+        <Name>Ethernet WinTAP</Name>
+        <IfNetworks>ip</IfNetworks>
+        <IpNetMask>255.255.255.0</IpNetMask>
+        <IpGateway>192.168.0.1</IpGateway>
+        <IpAddrFromServer>FALSE</IpAddrFromServer>
+        <IpAddr>192.168.0.3</IpAddr>
+        <IpDNSAddrFromServer>FALSE</IpDNSAddrFromServer>
+        <IpNameServer1>10.16.59.15</IpNameServer1>
+        <IpNameServer2>10.23.58.12</IpNameServer2>
+        <Ip6DNSAddrFromServer>FALSE</Ip6DNSAddrFromServer>
+    </LANService>
+    <LANService operation="add">
+        <Name>Ethernet Dynamic IP</Name>
+        <IfNetworks>ip</IfNetworks>
+        <IpNetMask>255.255.255.0</IpNetMask>
+        <IpGateway>10.32.194.254</IpGateway>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>10.32.194.251</IpAddr>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>194.72.6.51</IpNameServer1>
+        <IpNameServer2>194.72.6.52</IpNameServer2>
+        <ConfigDaemonManagerName>ConfigDaemonManager</ConfigDaemonManagerName>
+        <ConfigDaemonName>DhcpServ</ConfigDaemonName>
+    </LANService>
+    <LANService operation="add">
+        <Name>Ethernet Static 1</Name>
+        <IfNetworks>ip</IfNetworks>
+        <IpNetMask>255.255.255.0</IpNetMask>
+        <IpGateway>192.168.0.1</IpGateway>
+        <IpAddrFromServer>FALSE</IpAddrFromServer>
+        <IpAddr>192.168.0.2</IpAddr>
+        <IpDNSAddrFromServer>FALSE</IpDNSAddrFromServer>
+        <IpNameServer1>10.16.59.15</IpNameServer1>
+        <IpNameServer2>10.23.58.12</IpNameServer2>
+        <Ip6DNSAddrFromServer>FALSE</Ip6DNSAddrFromServer>
+    </LANService>
+</LANServiceTable>
+
+<DialInISPTable>
+    <DialInISP operation="template">
+        <Name>Default Dial In ISP</Name>
+        <Description>Default Dial In ISP</Description>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <UseEdge>FALSE</UseEdge>
+    </DialInISP>
+    <DialInISP operation="add">
+        <Name>Dial In ISP01</Name>
+        <Description>Dial In ISP01</Description>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <UseEdge>FALSE</UseEdge>
+    </DialInISP>
+</DialInISPTable>
+
+<DialOutISPTable>
+    <DialOutISP operation="template">
+        <Name>Default Dial Out ISP</Name>
+        <Description>Default Dial Out ISP</Description>
+        <DefaultTelNum>Default Dial Out ISP</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <PromptForLogin>TRUE</PromptForLogin>
+        <LoginName>1</LoginName>
+        <LoginPass>1</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>0</IfNetworks>
+        <IfPromptForAuth>TRUE</IfPromptForAuth>
+        <IfAuthName>1</IfAuthName>
+        <IfAuthPass>1</IfAuthPass>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+    <DialOutISP operation="add">
+        <Name>NT RAS</Name>
+        <Description>Test</Description>
+        <Type>INTERNETONLY</Type>
+        <DefaultTelNum>INTERNETONLY</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>TRUE</UseLoginScript>
+        <LoginScript>CHARMAP \[windows-1252\]\nLOOP 10\n{\nSEND &quot;CLIENT&quot;+&lt;0x0d&gt;\nWAIT 3\n{\n&quot;SERVER&quot; OK\n}\n}\nEXIT KErrNoAnswer$\n\nOK:\nEXIT\n</LoginScript>
+        <PromptForLogin>FALSE</PromptForLogin>
+        <LoginName>0</LoginName>
+        <LoginPass>0</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>FALSE</IfPromptForAuth>
+        <IfAuthName>RasUser</IfAuthName>
+        <IfAuthPass>pass</IfAuthPass>
+        <AuthRetries>0</AuthRetries>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+    <DialOutISP operation="add">
+        <Name>ISP01</Name>
+        <Description>PlaceHolder for ISP01</Description>
+        <Type>INTERNETONLY</Type>
+        <DefaultTelNum>INTERNETONLY</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <PromptForLogin>FALSE</PromptForLogin>
+        <LoginName>0</LoginName>
+        <LoginPass>0</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>TRUE</IfPromptForAuth>
+        <IfAuthName>xxx</IfAuthName>
+        <IfAuthPass>yyy</IfAuthPass>
+        <AuthRetries>0</AuthRetries>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+    <DialOutISP operation="add">
+        <Name>ISP02</Name>
+        <Description>PlaceHolder for ISP02</Description>
+        <Type>INTERNETONLY</Type>
+        <DefaultTelNum>INTERNETONLY</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <PromptForLogin>FALSE</PromptForLogin>
+        <LoginName>0</LoginName>
+        <LoginPass>0</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>TRUE</IfPromptForAuth>
+        <IfAuthName>xxx</IfAuthName>
+        <IfAuthPass>yyy</IfAuthPass>
+        <AuthRetries>0</AuthRetries>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+    <DialOutISP operation="add">
+        <Name>ISP03</Name>
+        <Description>PlaceHolder for ISP03</Description>
+        <Type>INTERNETONLY</Type>
+        <DefaultTelNum>INTERNETONLY</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <PromptForLogin>FALSE</PromptForLogin>
+        <LoginName>0</LoginName>
+        <LoginPass>0</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>TRUE</IfPromptForAuth>
+        <IfAuthName>xxx</IfAuthName>
+        <IfAuthPass>yyy</IfAuthPass>
+        <AuthRetries>0</AuthRetries>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+    <DialOutISP operation="add">
+        <Name>ISP04</Name>
+        <Description>PlaceHolder for ISP04</Description>
+        <Type>INTERNETONLY</Type>
+        <DefaultTelNum>INTERNETONLY</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <PromptForLogin>FALSE</PromptForLogin>
+        <LoginName>0</LoginName>
+        <LoginPass>0</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>TRUE</IfPromptForAuth>
+        <IfAuthName>xxx</IfAuthName>
+        <IfAuthPass>yyy</IfAuthPass>
+        <AuthRetries>0</AuthRetries>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+    <DialOutISP operation="add">
+        <Name>ISP05</Name>
+        <Description>PlaceHolder for ISP05</Description>
+        <Type>INTERNETONLY</Type>
+        <DefaultTelNum>INTERNETONLY</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <PromptForLogin>FALSE</PromptForLogin>
+        <LoginName>0</LoginName>
+        <LoginPass>0</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>TRUE</IfPromptForAuth>
+        <IfAuthName>xxx</IfAuthName>
+        <IfAuthPass>yyy</IfAuthPass>
+        <AuthRetries>0</AuthRetries>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+    <DialOutISP operation="add">
+        <Name>mRouterDialOutIsp</Name>
+        <Description>mRouterDialOutIsp</Description>
+        <Type>INTERNETONLY</Type>
+        <DefaultTelNum>INTERNETONLY</DefaultTelNum>
+        <DialResolution>TRUE</DialResolution>
+        <UseLoginScript>FALSE</UseLoginScript>
+        <PromptForLogin>FALSE</PromptForLogin>
+        <LoginName>0</LoginName>
+        <LoginPass>0</LoginPass>
+        <DisplayPCT>FALSE</DisplayPCT>
+        <IfParams>0</IfParams>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>FALSE</IfPromptForAuth>
+        <IfAuthName>IfAuthPass=</IfAuthName>
+        <IfAuthPass>AuthRetries=0</IfAuthPass>
+        <AuthRetries>0</AuthRetries>
+        <IfCallbackEnabled>FALSE</IfCallbackEnabled>
+        <CallbackTimeout>0</CallbackTimeout>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpAddr>1</IpAddr>
+        <IpNetMask>1</IpNetMask>
+        <IpGateway>1</IpGateway>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>1</IpNameServer1>
+        <IpNameServer2>1</IpNameServer2>
+        <EnableIPHeaderComp>FALSE</EnableIPHeaderComp>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <EnableSWComp>FALSE</EnableSWComp>
+        <BearerService>0</BearerService>
+        <BearerProtocol>UNSPECIFIED</BearerProtocol>
+        <RlpVersion>0</RlpVersion>
+        <IwfToMs>0</IwfToMs>
+        <MsToIwf>0</MsToIwf>
+        <AckTimer>0</AckTimer>
+        <RetransmissionAttempts>0</RetransmissionAttempts>
+        <ResequencePeriod>0</ResequencePeriod>
+        <V42Compression>0</V42Compression>
+        <V42Codewords>0</V42Codewords>
+        <V42MaxLength>0</V42MaxLength>
+        <Asymmetry>0</Asymmetry>
+        <UserInitUpgrade>FALSE</UserInitUpgrade>
+        <UseEdge>FALSE</UseEdge>
+    </DialOutISP>
+</DialOutISPTable>
+
+<AgentLookupTable>
+</AgentLookupTable>
+
+<CDMA2000PacketServiceTable>
+</CDMA2000PacketServiceTable>
+
+<DefaultCDMA2000Table>
+</DefaultCDMA2000Table>
+
+<ChargecardTable>
+    <Chargecard operation="add">
+        <Name>Dummy BT Chargecard</Name>
+        <AccountNumber>144,12345678</AccountNumber>
+        <Pin>0000</Pin>
+        <LocalRule>HG</LocalRule>
+        <NatRule>HFG</NatRule>
+        <IntlRule>HEFG</IntlRule>
+    </Chargecard>
+    <Chargecard operation="add">
+        <Name>Dummy Mercury Chargecard</Name>
+        <AccountNumber>0500800800,,12345678</AccountNumber>
+        <Pin>****</Pin>
+        <LocalRule>HG</LocalRule>
+        <NatRule>J,K,0FG</NatRule>
+        <IntlRule>HEFG</IntlRule>
+    </Chargecard>
+</ChargecardTable>
+
+<ConnectionPreferencesTable>
+    <ConnectionPreferences operation="add">
+        <Name>ConnectionPreferencesTable1</Name>
+        <Ranking>1</Ranking>
+        <Direction>OUTGOING</Direction>
+        <BearerSet>LAN</BearerSet>
+        <DialogPref>DONOTPROMPT</DialogPref>
+        <IAPRef>IAP.Ethernet WinTAP</IAPRef>
+    </ConnectionPreferences>
+</ConnectionPreferencesTable>
+
+<GlobalSettingsTable>
+    <GlobalSettings operation="add">
+        <Name>GlobalSettingsTable1</Name>
+        <WAPAccess>WAPAccessPoint.Default Dial In ISP</WAPAccess>
+        <RedialAttempts>3</RedialAttempts>
+        <SmsBearer>1</SmsBearer>
+        <SmsReceiveMode>2</SmsReceiveMode>
+        <GPRSAttachMode>1</GPRSAttachMode>
+        <AcceptIncomingGprs>1</AcceptIncomingGprs>
+        <GPRSClassCBearer>GSM</GPRSClassCBearer>
+        <ConnectionAttempts>2</ConnectionAttempts>
+        <ModemForDataAndFax>2</ModemForDataAndFax>
+        <ModemForPhoneServicesAndSMS>2</ModemForPhoneServicesAndSMS>
+        <LocationForDataAndFax>Location.Office</LocationForDataAndFax>
+        <LocationForPhoneServicesAndSMS>Location.Office</LocationForPhoneServicesAndSMS>
+        <DefaultNetwork>Network.Intranet</DefaultNetwork>
+        <BearerAvailabilityCheckTSY>mm</BearerAvailabilityCheckTSY>
+    </GlobalSettings>
+</GlobalSettingsTable>
+
+<IncomingGPRSTable>
+    <IncomingGPRS operation="add">
+        <Name>Incoming GPRS Settings PlaceHolder</Name>
+        <APN>Test</APN>
+        <PDPType>IPV4</PDPType>
+        <PDPAddress>0.0.0.0</PDPAddress>
+        <ReqPrecedence>1</ReqPrecedence>
+        <ReqDelay>1</ReqDelay>
+        <ReqReliability>1</ReqReliability>
+        <ReqPeakThroughput>1</ReqPeakThroughput>
+        <ReqMeanThroughput>1</ReqMeanThroughput>
+        <MinPrecedence>1</MinPrecedence>
+        <MinDelay>1</MinDelay>
+        <MinReliability>1</MinReliability>
+        <MinPeakThroughput>1</MinPeakThroughput>
+        <MinMeanThroughput>1</MinMeanThroughput>
+        <DataCompression>FALSE</DataCompression>
+        <HeaderCompression>FALSE</HeaderCompression>
+        <GprsUseEdge>FALSE</GprsUseEdge>
+        <AnonymousAccess>FALSE</AnonymousAccess>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>FALSE</IfPromptForAuth>
+        <IfAuthName>RasUser</IfAuthName>
+        <IfAuthPass>pass</IfAuthPass>
+        <AuthRetries>1</AuthRetries>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpDNSAddrFromServer>TRUE</IpDNSAddrFromServer>
+        <IpNameServer1>0.0.0.0</IpNameServer1>
+        <IpNameServer2>0.0.0.0</IpNameServer2>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+    </IncomingGPRS>
+</IncomingGPRSTable>
+
+<OutgoingGPRSTable>
+    <OutgoingGPRS operation="add">
+        <Name>GPRS01</Name>
+        <APN>gprs01APNPlaceHolder</APN>
+        <PDPType>IPV4</PDPType>
+        <ReqPrecedence>0</ReqPrecedence>
+        <ReqDelay>0</ReqDelay>
+        <ReqReliability>0</ReqReliability>
+        <ReqPeakThroughput>0</ReqPeakThroughput>
+        <ReqMeanThroughput>0</ReqMeanThroughput>
+        <MinPrecedence>0</MinPrecedence>
+        <MinDelay>0</MinDelay>
+        <MinReliability>0</MinReliability>
+        <MinPeakThroughput>0</MinPeakThroughput>
+        <MinMeanThroughput>0</MinMeanThroughput>
+        <DataCompression>FALSE</DataCompression>
+        <HeaderCompression>FALSE</HeaderCompression>
+        <GprsUseEdge>FALSE</GprsUseEdge>
+        <AnonymousAccess>FALSE</AnonymousAccess>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>FALSE</IfPromptForAuth>
+        <AuthRetries>1</AuthRetries>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpDNSAddrFromServer>FALSE</IpDNSAddrFromServer>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <GprsAccessPointType>0</GprsAccessPointType>
+        <QosWarningTimeout>0</QosWarningTimeout>
+    </OutgoingGPRS>
+    <OutgoingGPRS operation="add">
+        <Name>GPRS02</Name>
+        <APN>gprs02APNPlaceHolder</APN>
+        <PDPType>IPV4</PDPType>
+        <ReqPrecedence>0</ReqPrecedence>
+        <ReqDelay>0</ReqDelay>
+        <ReqReliability>0</ReqReliability>
+        <ReqPeakThroughput>0</ReqPeakThroughput>
+        <ReqMeanThroughput>0</ReqMeanThroughput>
+        <MinPrecedence>0</MinPrecedence>
+        <MinDelay>0</MinDelay>
+        <MinReliability>0</MinReliability>
+        <MinPeakThroughput>0</MinPeakThroughput>
+        <MinMeanThroughput>0</MinMeanThroughput>
+        <DataCompression>FALSE</DataCompression>
+        <HeaderCompression>FALSE</HeaderCompression>
+        <GprsUseEdge>FALSE</GprsUseEdge>
+        <AnonymousAccess>FALSE</AnonymousAccess>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>FALSE</IfPromptForAuth>
+        <AuthRetries>1</AuthRetries>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpDNSAddrFromServer>FALSE</IpDNSAddrFromServer>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <GprsAccessPointType>0</GprsAccessPointType>
+        <QosWarningTimeout>0</QosWarningTimeout>
+    </OutgoingGPRS>
+    <OutgoingGPRS operation="add">
+        <Name>GPRS03</Name>
+        <APN>gprs03APNPlaceHolder</APN>
+        <PDPType>IPV4</PDPType>
+        <ReqPrecedence>0</ReqPrecedence>
+        <ReqDelay>0</ReqDelay>
+        <ReqReliability>0</ReqReliability>
+        <ReqPeakThroughput>0</ReqPeakThroughput>
+        <ReqMeanThroughput>0</ReqMeanThroughput>
+        <MinPrecedence>0</MinPrecedence>
+        <MinDelay>0</MinDelay>
+        <MinReliability>0</MinReliability>
+        <MinPeakThroughput>0</MinPeakThroughput>
+        <MinMeanThroughput>0</MinMeanThroughput>
+        <DataCompression>FALSE</DataCompression>
+        <HeaderCompression>FALSE</HeaderCompression>
+        <GprsUseEdge>FALSE</GprsUseEdge>
+        <AnonymousAccess>FALSE</AnonymousAccess>
+        <IfNetworks>ip</IfNetworks>
+        <IfPromptForAuth>FALSE</IfPromptForAuth>
+        <AuthRetries>1</AuthRetries>
+        <IpAddrFromServer>TRUE</IpAddrFromServer>
+        <IpDNSAddrFromServer>FALSE</IpDNSAddrFromServer>
+        <EnableLCPExtension>FALSE</EnableLCPExtension>
+        <DisablePlainTextAuth>FALSE</DisablePlainTextAuth>
+        <GprsAccessPointType>0</GprsAccessPointType>
+        <QosWarningTimeout>0</QosWarningTimeout>
+    </OutgoingGPRS>
+</OutgoingGPRSTable>
+
+<DefaultGPRSTable>
+    <DefaultGPRS operation="add">
+        <Name>Dummy Default GPRS Settings</Name>
+        <Usage>1</Usage>
+        <APN>Access point name</APN>
+        <PDPType>IPV6</PDPType>
+        <PDPAddress>www.wid.com</PDPAddress>
+        <Precedence>1</Precedence>
+        <Delay>1</Delay>
+        <Reliability>1</Reliability>
+        <PeakThroughput>1</PeakThroughput>
+        <MeanThroughput>1</MeanThroughput>
+        <MinPrecedence>1</MinPrecedence>
+        <MinDelay>1</MinDelay>
+        <MinReliability>1</MinReliability>
+        <MinPeakThroughput>1</MinPeakThroughput>
+        <MinMeanThroughput>1</MinMeanThroughput>
+        <DataCompression>TRUE</DataCompression>
+        <HeaderCompression>TRUE</HeaderCompression>
+        <GprsUseEdge>FALSE</GprsUseEdge>
+        <AnonymousAccess>TRUE</AnonymousAccess>
+    </DefaultGPRS>
+</DefaultGPRSTable>
+
+<ProxyTable>
+    <Proxy operation="add">
+        <Name>ProxyTable1</Name>
+        <ISPRef>DialOutISP.NT RAS</ISPRef>
+        <UseProxyServer>TRUE</UseProxyServer>
+        <ProxyServerName>www.dummyproxy.com</ProxyServerName>
+        <ProtocolName>http</ProtocolName>
+        <PortNumber>80</PortNumber>
+        <Exceptions>www.dummyproxy.com/exception</Exceptions>
+    </Proxy>
+</ProxyTable>
+
+<LocationTable>
+    <Location operation="template">
+        <Name>Default Location</Name>
+        <IntlPrefixCode>+</IntlPrefixCode>
+        <NatPrefixCode>0</NatPrefixCode>
+        <NatCode>44</NatCode>
+        <AreaCode>44</AreaCode>
+        <DialOutCode>44</DialOutCode>
+        <DisableCallWaitingCode>44</DisableCallWaitingCode>
+        <Mobile>TRUE</Mobile>
+        <UsePulseDial>FALSE</UsePulseDial>
+        <WaitForDialTone>FALSE</WaitForDialTone>
+        <PauseAfterDialout>0</PauseAfterDialout>
+    </Location>
+    <Location operation="add">
+        <Name>Office</Name>
+        <IntlPrefixCode>00</IntlPrefixCode>
+        <NatPrefixCode>0</NatPrefixCode>
+        <NatCode>44</NatCode>
+        <AreaCode>171</AreaCode>
+        <DialOutCode>9,</DialOutCode>
+        <DisableCallWaitingCode>9,</DisableCallWaitingCode>
+        <Mobile>FALSE</Mobile>
+        <UsePulseDial>FALSE</UsePulseDial>
+        <WaitForDialTone>FALSE</WaitForDialTone>
+        <PauseAfterDialout>0</PauseAfterDialout>
+    </Location>
+    <Location operation="add">
+        <Name>Office Direct Dial</Name>
+        <IntlPrefixCode>00</IntlPrefixCode>
+        <NatPrefixCode>0</NatPrefixCode>
+        <NatCode>44</NatCode>
+        <AreaCode>171</AreaCode>
+        <DialOutCode>171</DialOutCode>
+        <DisableCallWaitingCode>171</DisableCallWaitingCode>
+        <Mobile>FALSE</Mobile>
+        <UsePulseDial>FALSE</UsePulseDial>
+        <WaitForDialTone>FALSE</WaitForDialTone>
+        <PauseAfterDialout>0</PauseAfterDialout>
+    </Location>
+    <Location operation="add">
+        <Name>Mobile</Name>
+        <IntlPrefixCode>+</IntlPrefixCode>
+        <NatPrefixCode>0</NatPrefixCode>
+        <NatCode>44</NatCode>
+        <AreaCode>44</AreaCode>
+        <DialOutCode>44</DialOutCode>
+        <DisableCallWaitingCode>44</DisableCallWaitingCode>
+        <Mobile>TRUE</Mobile>
+        <UsePulseDial>FALSE</UsePulseDial>
+        <WaitForDialTone>FALSE</WaitForDialTone>
+        <PauseAfterDialout>0</PauseAfterDialout>
+    </Location>
+    <Location operation="add">
+        <Name>Home</Name>
+        <IntlPrefixCode>00</IntlPrefixCode>
+        <NatPrefixCode>0</NatPrefixCode>
+        <NatCode>44</NatCode>
+        <AreaCode>181</AreaCode>
+        <DialOutCode>181</DialOutCode>
+        <DisableCallWaitingCode>181</DisableCallWaitingCode>
+        <Mobile>FALSE</Mobile>
+        <UsePulseDial>TRUE</UsePulseDial>
+        <WaitForDialTone>TRUE</WaitForDialTone>
+        <PauseAfterDialout>0</PauseAfterDialout>
+    </Location>
+</LocationTable>
+
+<SecureSocketTable>
+    <SecureSocket operation="add">
+        <Name>SecureSocketTable1</Name>
+        <ProtocolName>ssl3.0</ProtocolName>
+        <ProtoLibrary>ssladaptor.dll</ProtoLibrary>
+    </SecureSocket>
+    <SecureSocket operation="add">
+        <Name>SecureSocketTable2</Name>
+        <ProtocolName>tls1.0</ProtocolName>
+        <ProtoLibrary>ssladaptor.dll</ProtoLibrary>
+    </SecureSocket>
+</SecureSocketTable>
+
+<BTDeviceTable>
+</BTDeviceTable>
+
+<BTPersistTable>
+</BTPersistTable>
+
+<BTSecurityTable>
+</BTSecurityTable>
+
+<BTDefaultTable>
+</BTDefaultTable>
+
+<WAPAccessPointTable>
+    <WAPAccessPoint operation="template">
+        <Name>Default Dial In ISP</Name>
+        <CurrentBearer>WAPIPBearer</CurrentBearer>
+    </WAPAccessPoint>
+    <WAPAccessPoint operation="add">
+        <Name>Dummy WAP Settings</Name>
+        <CurrentBearer>WAPIPBearer</CurrentBearer>
+        <StartPage>www.wapstart.com</StartPage>
+    </WAPAccessPoint>
+</WAPAccessPointTable>
+
+<WAPIPBearerTable>
+    <WAPIPBearer operation="template">
+        <Name>WAPIPBearerTable1</Name>
+        <AccessPoint>WAPAccessPoint.-1</AccessPoint>
+        <GatewayAddress>0</GatewayAddress>
+        <IAPRef>IAP.-1</IAPRef>
+        <WSPOption>CONNECTIONLESS</WSPOption>
+        <Security>FALSE</Security>
+        <ProxyPortNumber>0</ProxyPortNumber>
+        <ProxyLogin>0</ProxyLogin>
+        <ProxyPassword>0</ProxyPassword>
+    </WAPIPBearer>
+    <WAPIPBearer operation="add">
+        <Name>WAPIPBearerTable2</Name>
+        <AccessPoint>WAPAccessPoint.Dummy WAP Settings</AccessPoint>
+        <GatewayAddress>www.wapgateway.com</GatewayAddress>
+        <IAPRef>IAP.Ethernet WinTAP</IAPRef>
+        <WSPOption>CONNECTIONORIENTED</WSPOption>
+        <Security>FALSE</Security>
+        <ProxyPortNumber>1</ProxyPortNumber>
+        <ProxyLogin>1</ProxyLogin>
+        <ProxyPassword>1</ProxyPassword>
+    </WAPIPBearer>
+</WAPIPBearerTable>
+
+<WAPSMSBearerTable>
+    <WAPSMSBearer operation="template">
+        <Name>WAPSMSBearerTable1</Name>
+        <AccessPoint>WAPAccessPoint.-1</AccessPoint>
+        <GatewayAddress>0</GatewayAddress>
+        <ServiceCentreAddress>0</ServiceCentreAddress>
+        <WSPOption>CONNECTIONLESS</WSPOption>
+        <Security>FALSE</Security>
+    </WAPSMSBearer>
+    <WAPSMSBearer operation="add">
+        <Name>WAPSMSBearerTable2</Name>
+        <AccessPoint>WAPAccessPoint.Dummy WAP Settings</AccessPoint>
+        <GatewayAddress>+4412345678901</GatewayAddress>
+        <ServiceCentreAddress>+442071234567</ServiceCentreAddress>
+        <WSPOption>CONNECTIONORIENTED</WSPOption>
+        <Security>FALSE</Security>
+    </WAPSMSBearer>
+</WAPSMSBearerTable>
+
+<VirtualBearerTable>
+</VirtualBearerTable>
+
+<VpnServiceTable>
+</VpnServiceTable>
+
+<WLANServiceExtensionTable>
+</WLANServiceExtensionTable>
+
+<PANServiceExtensionsTable>
+</PANServiceExtensionsTable>
+
+<EAPSecuritySettingsTable>
+</EAPSecuritySettingsTable>
+
+<TunnelledEAPSettingsTable>
+</TunnelledEAPSettingsTable>
+
+<EAPTLSSettingsTable>
+</EAPTLSSettingsTable>
+
+<LEAPSettingsTable>
+</LEAPSettingsTable>
+
+
+</CommDB:Config>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE testSuite SYSTEM "file:///testdriver/xml/testSuite.dtd" [ ]>
+<testSuite>
+	<name>smoketest</name>
+	<testItems>
+		<test>smoketest_system</test>
+		<test>smoketest_agenda</test>
+		<test>smoketest_mess</test>
+		<test>smoketest_timew</test>
+		<test>smoketest_phone</test>
+		<test>smoketest_contacts</test>												
+	</testItems>
+	<testExecuteServers>
+		<server>smoketest_agenda_server</server>
+		<server>smoketest_contacts_server</server>
+		<server>smoketest_mess_server</server>
+		<server>smoketest_timew_server</server>						
+	</testExecuteServers>
+</testSuite>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/smoketest_agenda.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteTest SYSTEM "file:///testdriver/xml/testExecuteTest.dtd" [ ]>
+<testExecuteTest>
+	<name>smoketest_agenda</name>
+	<timeout>1000</timeout>
+	<testScripts>	
+		<script>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_agenda.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_agenda.script</devicePath>
+		</script>
+	</testScripts>
+	<testServers>
+		<server>smoketest_agenda_server</server>
+	</testServers>
+	<dependencies>
+		<data>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_agenda.ini</hostPath>
+			<devicePath>c:\smoketest\smoketest_agenda.ini</devicePath>
+		</data>
+	</dependencies>
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/smoketest_contacts.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteTest SYSTEM "file:///testdriver/xml/testExecuteTest.dtd" [ ]>
+<testExecuteTest>
+	<name>smoketest_contacts</name>
+	<timeout>1000</timeout>
+	<testScripts>	
+		<script>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_contacts.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_contacts.script</devicePath>
+		</script>
+	</testScripts>
+	<testServers>
+		<server>smoketest_contacts_server</server>
+	</testServers>
+	<dependencies>
+		<data>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_contacts.ini</hostPath>
+			<devicePath>c:\smoketest\smoketest_contacts.ini</devicePath>
+		</data>
+	</dependencies>
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/smoketest_mess.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteTest SYSTEM "file:///testdriver/xml/testExecuteTest.dtd" [ ]>
+<testExecuteTest>
+	<name>smoketest_mess</name>
+	<timeout>1000</timeout>
+	<testScripts>	
+                <script>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_mess.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_mess.script</devicePath>
+		</script>
+	</testScripts>
+	<testServers>
+		<server>smoketest_mess_server</server>
+	</testServers>
+	<dependencies>
+		<data>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_mess.ini</hostPath>
+			<devicePath>c:\smoketest\smoketest_mess.ini</devicePath>
+		</data>
+		<data>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\sms\message1.txt</hostPath>
+			<devicePath>c:\smoketest\sms\message1.txt</devicePath>
+		</data>
+        <data>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_createsmsaccount.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_createsmsaccount.script</devicePath>
+		</data>
+                
+	</dependencies>
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/smoketest_phone.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteTest SYSTEM "file:///testdriver/xml/testExecuteTest.dtd" [ ]>
+<testExecuteTest>
+	<name>smoketest_phone</name>
+	<timeout>1000</timeout>
+	<testScripts>	
+		<script>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_phone.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_phone.script</devicePath>
+		</script>
+	</testScripts>
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/smoketest_syncmlapp.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteTest SYSTEM "file:///testdriver/xml/testExecuteTest.dtd" [ ]>
+<testExecuteTest>
+	<name>smoketest_syncmlapp</name>
+	<timeout>1000</timeout>
+	<testScripts>	
+		<script>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_syncmlapp.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_syncmlapp.script</devicePath>
+		</script>
+	</testScripts>
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/smoketest_system.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteTest SYSTEM "file:///testdriver/xml/testExecuteTest.dtd" [ ]>
+<testExecuteTest>
+	<name>smoketest_system</name>
+	<timeout>1000</timeout>
+	<testScripts>	
+		<script>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_system.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_system.script</devicePath>
+		</script>
+	</testScripts>
+	<dependencies>	
+		<buildable type="test">
+  			<hostPath>\epoc32\release\winscw\udeb\smoketest_system.exe</hostPath> 
+  			<devicePath>c:\sys\bin\smoketest_system.exe</devicePath> 
+  			<mmpFile>smoketest_system.mmp</mmpFile> 
+  			<bldInfPath>smoketest\system\group\bld.inf</bldInfPath> 
+  		</buildable>
+	</dependencies>  
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/smoketest_timew.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteTest SYSTEM "file:///testdriver/xml/testExecuteTest.dtd" [ ]>
+<testExecuteTest>
+	<name>smoketest_timew</name>
+	<timeout>1000</timeout>
+	<testScripts>	
+		<script>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_timew.script</hostPath>
+			<devicePath>c:\smoketest\smoketest_timew.script</devicePath>
+		</script>
+	</testScripts>
+	<testServers>
+		<server>smoketest_timew_server</server>
+	</testServers>
+	<dependencies>
+		<data>
+			<hostPath>\epoc32\release\winscw\udeb\z\smoketest\smoketest_timew.ini</hostPath>
+			<devicePath>c:\smoketest\smoketest_timew.ini</devicePath>
+		</data>
+	</dependencies>
+</testExecuteTest>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_agenda_server.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteServer SYSTEM "file:///testdriver/xml/testExecuteServer.dtd" [ ]>
+<testExecuteServer>
+	<name>smoketest_agenda_server</name>
+	<mmpFile>smoketest_agenda.mmp</mmpFile>
+	<bldInfPath>smoketest\agenda\group\bld.inf</bldInfPath>
+</testExecuteServer>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_contacts_server.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteServer SYSTEM "file:///testdriver/xml/testExecuteServer.dtd" [ ]>
+<testExecuteServer>
+	<name>smoketest_contacts_server</name>
+	<mmpFile>smoketest_contacts.mmp</mmpFile>
+	<bldInfPath>smoketest\contacts\group\bld.inf</bldInfPath>
+</testExecuteServer>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_mess_server.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteServer SYSTEM "file:///testdriver/xml/testExecuteServer.dtd" [ ]>
+<testExecuteServer>
+	<name>smoketest_mess_server</name>
+	<mmpFile>smoketest_mess.mmp</mmpFile>
+	<bldInfPath>smoketest\messaging\group\bld.inf</bldInfPath>
+	<dependencies>	
+		<buildable type="test">
+  			<hostPath>smoketest_utils.dll</hostPath> 
+  			<devicePath>c:\system\libs\smoketest_utils.dll</devicePath> 
+  			<mmpFile>smoketest_utils.mmp</mmpFile> 
+  			<bldInfPath>smoketest\utils\group\bld.inf</bldInfPath> 
+  		</buildable>
+		<buildable type="test">
+  			<hostPath>SmokeTestSecureFSclient.dll</hostPath> 
+  			<devicePath>c:\system\libs\SmokeTestSecureFSclient.dll</devicePath> 
+  			<mmpFile>SmokeTestSecureFSclient.mmp</mmpFile> 
+  			<bldInfPath>smoketest\utils\group\bld.inf</bldInfPath> 
+  		</buildable>
+		<buildable type="test">
+  			<hostPath>SmokeTestSecureFSserver.exe</hostPath> 
+  			<devicePath>c:\system\libs\SmokeTestSecureFSserver.exe</devicePath> 
+  			<mmpFile>SmokeTestSecureFSserver.mmp</mmpFile> 
+  			<bldInfPath>smoketest\utils\group\bld.inf</bldInfPath> 
+  		</buildable>
+	</dependencies>  				
+</testExecuteServer>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/smoketest/testexecuteservers/smoketest_timew_server.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE testExecuteServer SYSTEM "file:///testdriver/xml/testExecuteServer.dtd" [ ]>
+<testExecuteServer>
+	<name>smoketest_timew_server</name>
+	<mmpFile>smoketest_timew.mmp</mmpFile>
+	<bldInfPath>smoketest\timew\group\bld.inf</bldInfPath>
+	<dependencies>	
+		<buildable type="test">
+			<hostPath>consolealarmalertserver.dll</hostPath> 
+		  	<devicePath>c:\system\libs\consolealarmalertserver.dll</devicePath> 
+		  	<mmpFile>consolealarmalertserver.mmp</mmpFile> 
+		  	<bldInfPath>smoketest\timew\consolealarmalertserver\bld.inf</bldInfPath> 
+		</buildable>	
+	</dependencies>	
+</testExecuteServer>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/smoketest/xml/xml.driver	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<driver:driver xmlns:driver="http://www.symbian.com/TestDriver">
+  <task name="xml" timeout="100000">
+    <task name="smoketest">
+      <executeOnPC>
+        <build testBuild="true" URI="${sourceroot}\smoketest\agenda\group\">
+          <componentName>smoketest_agenda</componentName>
+        </build>
+        <build testBuild="true" URI="${sourceroot}\smoketest\contacts\group\">
+          <componentName>smoketest_contacts</componentName>
+        </build>
+        <build testBuild="true" URI="${sourceroot}\smoketest\utils\group\">
+          <componentName>smoketest_utils</componentName>
+          <componentName>smoketestsecurefsclient</componentName>
+          <componentName>smoketestsecurefsserver</componentName>
+        </build>
+        <build testBuild="true" URI="${sourceroot}\smoketest\messaging\group\">
+          <componentName>smoketest_mess</componentName>
+        </build>
+        <build testBuild="true" URI="${sourceroot}\smoketest\timew\consolealarmalertserver\">
+          <componentName>consolealarmalertserver</componentName>
+        </build>
+        <build testBuild="true" URI="${sourceroot}\smoketest\timew\group\">
+          <componentName>smoketest_timew</componentName>
+        </build>
+      </executeOnPC>
+      <task name="smoketest_system" timeout="1000">
+        <executeOnPC>
+          <build testBuild="true" URI="${sourceroot}\smoketest\system\group\">
+            <componentName>smoketest_system</componentName>
+          </build>
+        </executeOnPC>
+        <executeOnSymbian>
+          <testExecuteScript PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_system.script" SymbianPath="c:\smoketest\smoketest_system.script"/>
+        </executeOnSymbian>
+      </task>
+      <task name="smoketest_agenda" timeout="1000">
+        <transferToSymbian>
+          <transfer move="false" PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_agenda.ini" SymbianPath="c:\smoketest\smoketest_agenda.ini"/>
+        </transferToSymbian>
+        <executeOnSymbian>
+          <testExecuteScript PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_agenda.script" SymbianPath="c:\smoketest\smoketest_agenda.script"/>
+        </executeOnSymbian>
+      </task>
+      <task name="smoketest_mess" timeout="1000">
+        <transferToSymbian>
+          <transfer move="false" PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_mess.ini" SymbianPath="c:\smoketest\smoketest_mess.ini"/>
+          <transfer move="false" PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\sms\message1.txt" SymbianPath="c:\smoketest\sms\message1.txt"/>
+          <transfer move="false" PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_createsmsaccount.script" SymbianPath="c:\smoketest\smoketest_createsmsaccount.script"/>
+        </transferToSymbian>
+        <executeOnSymbian>
+          <testExecuteScript PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_mess.script" SymbianPath="c:\smoketest\smoketest_mess.script"/>
+        </executeOnSymbian>
+      </task>
+      <task name="smoketest_timew" timeout="1000">
+        <transferToSymbian>
+          <transfer move="false" PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_timew.ini" SymbianPath="c:\smoketest\smoketest_timew.ini"/>
+        </transferToSymbian>
+        <executeOnSymbian>
+          <testExecuteScript PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_timew.script" SymbianPath="c:\smoketest\smoketest_timew.script"/>
+        </executeOnSymbian>
+      </task>
+      <task name="smoketest_phone" timeout="1000">
+        <executeOnSymbian>
+          <testExecuteScript PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_phone.script" SymbianPath="c:\smoketest\smoketest_phone.script"/>
+        </executeOnSymbian>
+      </task>
+      <task name="smoketest_contacts" timeout="1000">
+        <transferToSymbian>
+          <transfer move="false" PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_contacts.ini" SymbianPath="c:\smoketest\smoketest_contacts.ini"/>
+        </transferToSymbian>
+        <executeOnSymbian>
+          <testExecuteScript PCPath="${epocroot}\epoc32\release\winscw\udeb\z\smoketest\smoketest_contacts.script" SymbianPath="c:\smoketest\smoketest_contacts.script"/>
+        </executeOnSymbian>
+      </task>
+    </task>
+  </task>
+</driver:driver>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/data/ipadm.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,180 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ipadm.rss - IP adminstration tool resource file
+//
+
+NAME IPAD
+
+#include <techview/eikon.rh>
+
+#include "ipadm.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	menubar=r_IpAdm_menubar;
+	hotkeys=r_IpAdm_hotkeys;
+#ifdef CRYSTAL
+	cba = r_IpAdm_cba;
+#else
+	toolbar=r_IpAdm_toolbar;
+#endif
+	}
+
+#ifdef CRYSTAL
+
+RESOURCE CBA r_IpAdm_cba
+{
+   	buttons = 
+	{
+		CBA_BUTTON
+		{
+			id=EIpAdmInterfaces;
+			txt="Interfaces";
+		},
+		CBA_BUTTON
+		{
+			id=EIpAdmRoutes;
+			txt="Routes";
+		},
+		CBA_BUTTON
+		{
+			id=EEikCmdExit;
+			txt="Exit";
+		}
+	};
+}
+
+#else // not CRYSTAL  (Pre-ER6 and Hurricane)
+
+RESOURCE TOOLBAR r_IpAdm_toolbar
+	{
+	controls=
+		{
+		TBAR_CTRL 
+			{ 
+			id=EIpAdmFilename;
+			type=EEikCtFileNameLabel; 
+			flags=EEikToolBarCtrlHasSetMinLength;
+			length=KEikStdFileNameLabelHeight;
+			},
+		TBAR_BUTTON
+			{
+			flags=EEikToolBarCtrlIsStretchable;
+			id=EIpAdmInterfaces;
+			txt="Interfaces";
+			},
+        TBAR_BUTTON
+			{
+			flags=EEikToolBarCtrlIsStretchable;
+			id=EIpAdmRoutes;
+			txt="Routes";
+			},
+        TBAR_BUTTON
+			{
+			flags=EEikToolBarCtrlIsStretchable;
+			id=EIpAdmAddRoutes;
+			txt="AddRoutes";
+			}
+  		};	
+	}  
+#endif //CRYSTAL
+
+RESOURCE HOTKEYS r_IpAdm_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit; key='e'; }
+        };
+    }
+
+RESOURCE MENU_BAR r_IpAdm_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_IpAdm_file_menu; txt="File"; },
+ 		MENU_TITLE { menu_pane=r_IpAdm_console_menu; txt="Console"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_IpAdm_file_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EIpAdmInterfaces; txt="Interfaces"; },
+		MENU_ITEM { command=EIpAdmRoutes; txt="Routes"; },
+		MENU_ITEM { command=EIpAdmAddRoutes; txt="Add Routes"; },
+		MENU_ITEM { command=EEikCmdExit; txt="Exit"; }
+        };
+    }
+
+RESOURCE MENU_PANE r_IpAdm_console_menu
+	{
+	items=
+        {
+		MENU_ITEM
+            {
+            command=EIpAdmClearScreen;
+            txt="ClearScreen";
+            },
+        MENU_ITEM
+            {
+            command=EConsolFontDialog;
+            txt="Set font…";
+            },
+		MENU_ITEM
+            {
+            command=EConsolHistoryDialog;
+            txt="History size…";
+			},
+		MENU_ITEM
+            {
+            cascade=r_IpAdm_toolbars_menu;
+           	txt="Toolbars";
+            }
+
+		};
+	}
+
+RESOURCE MENU_PANE r_IpAdm_toolbars_menu
+    {
+    items=
+        {
+        MENU_ITEM
+            {
+            command=EConsolScrollNone;
+            txt="None";
+            },
+        MENU_ITEM
+            {
+            command=EConsolScrollHor;
+            txt="Horiz only";
+            },
+        MENU_ITEM
+            {
+            command=EConsolScrollVert;
+            txt="Vert only";
+            },
+        MENU_ITEM
+            {
+            command=EConsolScrollBoth;
+            txt="Both scrollbars";
+            }
+        };
+    }
+
+RESOURCE TBUF r_busy { buf="Busy…"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/data/ipadm_reg.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,24 @@
+// 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:
+//
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10000887  // Ipadm UID
+
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file = "ipadm";
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/data/route.ini	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,54 @@
+# 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:
+# //    route.ini - a configuration file for ipadm
+# THIS IS AN EXAMPLE FILE
+# This file should be located in C:\Data\IpAdm\route.ini.
+# This file is processed by IpAdm when you push the
+# Add Routes -button.
+# Each line starting with route-add followed by positional
+# parameters is directly used as a KSoInetAddRoute parameter:
+# route-add <dest> <netmask> <metric> <gateway> [interface]
+# If optional parameter interface is omitted, gateway address
+# determines the interface. With this command you can add static
+# routes into the routing table.
+# Some 6to4 route examples
+# route-add 2001:: ffff:: 1 2002:c171:3a50::c171:3a50
+# route-add 3ffe:: ffff:: 1 2002:c171:3a50::c171:3a50
+# route-add 2001:: ffff:: 1 2002:836b:4179::836b:4179
+# route-add 3ffe:: ffff:: 1 2002:836b:4179::836b:4179
+# Some other examples
+# route-add 172.21.40.1 255.255.254.0 1 - 172.21.40.106
+# route-add 3ffe:501:fffff:ff05:: ffff:ffff:ffff:ffff:: 1 3ffe:501:ffff:ff03:200:ff:fe00:a0a0 fe80::260:63ff:fe01:d6a9
+# To add a default route, use zero address and prefix
+# route-add :: :: 1 3ffe:501:ffff:ff03:200:ff:fe00:a0a0 fe80::260:63ff:fe01:d6a9
+# route-add 0.0.0.0 0.0.0.0 1 172.21.40.1 182.21.40.106
+# Similarly you can configure interfaces with ifconfig
+# ifconfig <if> <prefix> prefix <prefixlen> ["alias"] ["up"/"down"] ["delete"]
+# ifconfig ethernet 10.0.5.3 alias
+# ifconfig ethernet 3ffe:501:ffff:100:: prefix 64 alias
+# ifconfig ethernet fe80::200:ff:f00:a0a0 prefix 64 delete
+# ifconfig ethernet fe80::260:63ff:fe01:d6a9 prefix 64 up
+# If you want to initiate DAD on the fly you need to remove
+# all addresses of specific interface identifier from an interface
+# and then define a new interface identifier to be checked by DAD:
+# ifconfig ethernet 3ffe:501:ffff:100:200:ff:fe00:a0a0 prefix 64 delete
+# ifconfig ethernet fe80::200:ff:fe00:a0a0 prefix 64 delete
+# ifconfig ethernet fe80::260:63ff:fe01:d6a9 prefix 64 delete
+# ifconfig ethernet fe80::260:63ff:fe01:d6a9 prefix 64 up
+# The above method is handy for example when running the TAHI
+# stateless address autoconfiguration tests requiring frequently
+# all addresses to be removed and DAD to be performed for link-local
+# address. With EPOC you don't need to reboot, just have appropriate
+# settings in route.ini and push the Add Routes button in IpAdm.
+#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,66 @@
+// 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:
+// bld.inf - IP administration tool.
+// IP administration tool.
+//
+
+
+
+/**
+ @file
+*/
+
+PRJ_PLATFORMS
+// specify the platforms your component needs to be built for here
+// defaults to WINS MARM so you can ignore this if you just build these
+
+PRJ_EXPORTS
+// Specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in \epoc32\include
+
+PRJ_TESTEXPORTS
+
+../group/ipadm.iby    /epoc32/rom/include/ipadm.iby
+
+../data/route.ini	/epoc32/wins/c/private/10000887/route.ini
+../data/route.ini	/epoc32/winscw/c/private/10000887/route.ini
+
+PRJ_MMPFILES
+// Specify the .mmp files required for building the important component
+// releasables. Note that you should specify any .mmp files for test
+// programs further down the file.
+//
+// Specify "tidy" if the component you need to build doesn't need to be
+// released to the rest of the company
+// specify "ignore" if the MMP file exists but should be
+// ignored.
+
+
+PRJ_TESTMMPFILES
+// specify the .mmp files required for building any test programs here
+//
+// You can specify "manual" to denote that a test should be listed in a
+// generated batch file for running a group of tests
+// which require user input during testing.
+// You can specify "support" to denote that a file is a test support file
+// and shouldn't be listed in a batch file for running a group of tests
+// By default, each test will be listed in a batch file for running a group
+// of tests which can be left to run without requiring watching over
+// by the person running the tests, i.e. tests where no user
+// input is required.  The default will apply if neither "manual"
+// or "support" is specified.
+
+ipadm.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/group/ipadm.iby	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,27 @@
+// 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:
+//
+
+#ifndef __IPADM_IBY__
+#define __IPADM_IBY__
+
+REM static dependencies
+#include <esock.iby>
+#include <insock.iby>
+
+file=ABI_DIR\DEBUG_DIR\ipadm.exe										sys\bin\ipadm.exe
+data=MULTI_LINGUIFY(RSC EPOCROOT##epoc32\data\Z\resource\Apps\ipadm		resource\Apps\ipadm)
+data=MULTI_LINGUIFY(RSC EPOCROOT##epoc32\data\Z\private\10003a3f\Apps\ipadm_reg  private\10003a3f\Apps\ipadm_reg)
+
+#endif // __IPADM_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/group/ipadm.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,67 @@
+// 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:
+// ipadm.mmp - IP administration tool MMP file
+// IP administration tool.
+//
+
+
+
+/**
+ @file
+*/
+
+MACRO		EPOC_SDK=0x08000000
+
+TARGET        ipadm.exe
+TARGETTYPE    exe
+MACRO         MAKE_EXE_APPLICATION
+UID           0 0x10000887
+
+EPOCSTACKSIZE 0x5000
+TARGETPATH    /sys/bin
+
+SOURCEPATH    ../src
+
+SOURCE        ipadm.cpp engine.cpp uniload.cpp
+
+
+// UI FW v2 RESOURCE section begins
+START RESOURCE      ../data/ipadm.rss
+HEADER
+TARGETPATH /resource/apps
+END
+
+START RESOURCE	../data/ipadm_reg.rss
+TARGETPATH /private/10003a3f/apps
+END
+
+// UI FW v2 RESOURCE section ends
+
+
+USERINCLUDE   ../inc
+SYSTEMINCLUDE ../../../../../os/networkingsrv/networkprotocols/iphook/inhook6/inc 
+
+SYSTEMINCLUDE /epoc32/include/techview
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib apparc.lib
+LIBRARY       cone.lib eikcore.lib eikcoctl.lib
+LIBRARY       efsrv.lib eikcdlg.lib etext.lib
+LIBRARY       esock.lib insock.lib
+
+CAPABILITY ALL -Tcb
+
+VENDORID	0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/group/networking_ipadm.history.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="IP Hook Examples">
+  <purpose>
+  </purpose>
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/group/networking_ipadm.mrp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,25 @@
+#
+# 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: 
+#
+
+component networking_ipadm
+source 		\sf\app\techview\networkingutils\ipadministrationtool
+notes_source 	\component_defs\release.src
+
+# ==   comments appear after the line they describe  ==
+ipr T
+# Can be distributed with Cust Kits
+# Cannot be distributed with Dev Kits
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/inc/engine.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,56 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// engine.h - IP administration tool engine
+//
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef __ENGINE_H
+#define __ENGINE_H
+
+#include <es_sock.h>
+#include <in_sock.h>
+#include <coemain.h>
+#include <coecntrl.h>
+#include <s32file.h>
+
+class CIpAdmView;
+
+class CIpAdmEngine : public CBase
+	{
+public:
+	CIpAdmEngine(CIpAdmView *aView) : iAppView(aView) {}
+	~CIpAdmEngine();
+	void ConstructL();
+	void HandleCommandL(TInt aCommand);
+private:
+	CIpAdmView *iAppView;
+	void Show(TInt aVersion, const TSoInetInterfaceInfo &aInfo);
+	void Show(TInt aVersion, const TSoInetRouteInfo &aInfo);
+	void ListInterfaces(TInt aVersion, const TDesC &aProtocol);
+	void ListRoutes(TInt aVersion, const TDesC &aProtocol);
+	void AddRoutes(const TDesC &aProtocol);
+public:
+	RFs iFS;
+	RSocketServ iSS;
+	void CheckResultL(const TDesC &aText, TInt aResult);
+	TInt CheckResult(const TDesC &aText, TInt aResult);
+	void ShowText(const TDesC &aText);
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/inc/ipadm.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,155 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ipadm.h - IP administration tool main module
+//
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef __IPADM_H
+#define __IPADM_H
+
+//#include <coecntrl.h>
+#include <coeccntx.h>
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <techview/eiktbar.h>
+#include <techview/eikconso.h>
+
+#include <ipadm.rsg>
+#include "ipadm.hrh"
+
+const TUid KUidIpAdmApp = {0x10000887}; 
+// 
+// CSimpleConsole
+//
+enum TMessageControlFontStyle
+    {
+    EStyleElementBold=EMenuCommandBold,
+    EStyleElementItalic=EMenuCommandItalic,
+    EStyleElementInverse=EMenuCommandInverse,
+    EStyleElementUnderline=EMenuCommandUnderline,
+    EStyleElementColor=EMenuCommandColor
+    };
+
+class CConsoleControl : public CCoeControl
+	{
+public:
+	CConsoleControl() {}
+	~CConsoleControl();
+	void ConstructL(const TPoint& aLeftTop, const TSize& aSize, TInt aFlags);
+    void HandleCommandL(TInt aCommand);
+    void ActivateL();
+	void SetScrollBarVisibilityL(CEikScrollBarFrame::TScrollBarVisibility aHBarVisibility, CEikScrollBarFrame::TScrollBarVisibility aVBarVisibility);
+	void DrawCursor();
+	void Write(const TDesC &aDes);
+	CEikConsoleControl *ConsoleControl() const;
+	TBool UpdateScrollBars();
+	void ClearScreen();
+	void Redraw(const TRect &aRect);
+	void Lf();
+protected:
+    void FocusChanged(TDrawNow aDrawNow);
+private:
+    void ToggleFontStyleAndRedrawL(TMessageControlFontStyle aStyleElement);
+	
+private:
+	CEikConsoleScreen* iConsole;
+	TInt iHistory;
+	};
+
+
+//
+// class CIpAdmView
+//
+class CIpAdmEngine;
+class CIpAdmView : public CCoeControl, public MCoeControlBrushContext
+    {
+public:
+	~CIpAdmView();
+    void ConstructL(const TRect& aRect);
+	
+	void StartL();
+	void StopL();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	void Write(const TDesC &aDes);
+	void ClearScreenL();
+	void ShowError(TInt aId);
+
+	void HandleCommandL(TInt aCommand);
+private: 
+	void Draw(const TRect& /*aRect*/) const;
+
+	//Component Controls
+	void CreateBigConsoleL(TInt aFlags);
+
+	void ShowError(const TDes &msg);
+	void ShowError(const TDes &msg, TInt aErr);
+
+private:
+	CConsoleControl* iConsole;
+	
+	CIpAdmEngine *iModel;
+	TBool iRunning;
+    };
+
+
+//
+//	CIpAdmAppUi
+//
+class CIpAdmAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CIpAdmAppUi();
+
+private:
+	void HandleCommandL(TInt aCommand);
+	//	TBool LaunchOptionsDialog(CUDPSendEngine* aModel);
+	// void LaunchAboutDialog();
+private:
+    CIpAdmView* iAppView;
+//	CHelpTask *iHelp;
+    };
+
+//
+// CIpAdmDocument
+//
+class CIpAdmDocument : public CEikDocument
+	{
+public:
+	CIpAdmDocument(CEikApplication& aApp);
+private:
+	CEikAppUi* CreateAppUiL();
+	};
+
+//
+// CIpAdmAppUi
+//
+class CIpAdmApplication : public CEikApplication
+	{
+private: // from CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/inc/ipadm.hrh	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,57 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ipadm.hrh - IP administration tool ui constants
+//
+
+
+
+/**
+ @internalComponent
+*/
+
+enum TIpAdmMenuCommands
+	{
+	EIpAdmFilename = 100,
+	EIpAdmInterfaces,
+	EIpAdmRoutes,
+	EIpAdmAddRoutes,
+	EIpAdmCache,
+	EIpAdmUpdates,
+
+	EConsolHistoryDialog,
+	EConsolFontDialog,
+	EConsolScrollNone,
+	EConsolScrollHor,
+	EConsolScrollVert,
+	EConsolScrollBoth,
+
+	EIpAdmClearScreen,
+	
+	EMenuCommandLongLine,
+	EMenuScreenSize,
+	EMenuCursorSize,
+	EMenuWindowType	,
+	EMenuCommandFileExit,
+
+	EMenuCommandHideCursor,
+	EMenuCommandIgnoreCursor,
+	EMenuCommandScrollLock,
+	EMenuCommandPrintable,
+
+	EMenuCommandInverse,
+	EMenuCommandBold,
+	EMenuCommandItalic,
+	EMenuCommandUnderline,
+	EMenuCommandColor
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/inc/uniload.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,36 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// uniload.h - Universal file load (work for narrow or wide builds)
+//
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef __UNILOAD_H__
+#define __UNILOAD_H__
+
+#include <e32std.h>
+#include <f32file.h>
+
+class UnicodeLoad
+	{
+public:
+	static HBufC *LoadL(RFs &aFs, const TDesC &aName);
+	};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/src/engine.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,859 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// engine.cpp - IP administration tool engine
+//
+
+#include <eikenv.h>
+#include "ipadm.h"
+#include "engine.h"
+
+#include "uniload.h"
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <in_sock_internal.h>
+#endif
+
+#ifndef __SECURE_DATA__
+#define DEFAULT_ROUTES_FILE	_L("C:\\Data\\IpAdm\\route.ini")
+#else
+#define DEFAULT_ROUTES_FILE	_L("route.ini")
+#endif
+
+LOCAL_C void AppendInterfaceStatus(TDes& buf, const TInt aStatus)
+	{
+	switch (aStatus)
+		{
+		case EIfPending:	buf.Append(_L("PEND ")); break;
+		case EIfUp:			break;
+		case EIfBusy:		buf.Append(_L("BUSY ")); break;
+		case EIfDown:		buf.Append(_L("DOWN ")); break;
+		default:			buf.Append(_L("???? ")); break;
+		}
+	}
+
+LOCAL_C void AppendInterfaceName(TDes& buf, const TName& aName)
+	{
+	if (aName.Length() > 0)
+		{
+		buf.Append(aName);
+		}
+	else
+		{
+		buf.Append(_L("default"));
+		}
+	}
+
+LOCAL_C void AppendRouteType(TDes& buf, const TInt aType)
+	{
+	switch (aType)
+		{
+		case ERtNormal:		buf.Append(_L(" ")); break;
+		case ERtUser:		buf.Append(_L("u ")); break;
+		case ERtIcmpAdd:	buf.Append(_L("- ")); break; // for IPv6, this is ND entry
+		case ERtIcmpDel:	buf.Append(_L("d ")); break;
+		default:			buf.Append(_L("? ")); break;
+		}
+	}
+
+LOCAL_C void AppendRouteState(TDes& buf, const TInt aState)
+	{
+	switch (aState)
+		{
+		case ERtNone:		buf.Append(_L("NONE ")); break;
+		case ERtPending:	buf.Append(_L("PEND ")); break;
+		case ERtBusy:		buf.Append(_L("BUSY ")); break;
+		case ERtReady:		break;
+		case ERtDown:		buf.Append(_L("DOWN ")); break;
+		default:			buf.Append(_L("???? ")); break;
+		}
+	}
+
+//
+//
+// Just count the number of rightmost zeroes in an IPv6 address
+// and return (128 - count).
+//
+LOCAL_C TInt MaskLength(const TIp6Addr &aAddr)
+	{
+	TInt count = 0;
+	for (TInt i = sizeof(aAddr.u.iAddr8) / sizeof(aAddr.u.iAddr8[0]); --i >= 0; )
+		{
+		if (aAddr.u.iAddr8[i])
+			{
+			TUint8 nonZeroByte = aAddr.u.iAddr8[i];
+			while ((nonZeroByte & 1) == 0)
+				{
+				count += 1;
+				nonZeroByte >>= 1;
+				}
+			break;
+			}
+		count += 8;
+		}
+	return 128-count;
+	}
+
+
+LOCAL_C TInt MaskLength(TUint32 aAddr)
+	{
+	TInt count = 0;
+	// obviously, this is "brute force" counting
+	while (aAddr & 0x80000000)
+		{
+		count++;
+		aAddr <<= 1;
+		}
+	return count;
+	}
+
+
+// TRawAddr
+// *********
+// Lightweight internal help class for handling the link layer addresses
+//
+class TRawAddr : public TSockAddr
+	{
+public:
+
+	void Output(TDes& aBuf) const
+		{
+		TUint8* p = (TUint8*)UserPtr();
+		TInt len = ((TSockAddr *)this)->GetUserLen();	//lint !e1773 // it's a kludge but works anyway
+
+		aBuf.SetLength(0);
+		if (len == 0)
+			return;
+		if (aBuf.MaxLength() < len * 4)
+			{
+			aBuf.Fill('*', aBuf.MaxLength());
+			return;
+			}
+		if (len == 0)
+			return;
+		for (;;)
+			{
+			aBuf.AppendFormat(_L("%02X"), *p++ & 0xFF);
+			if (--len == 0)
+				break;
+			aBuf.Append(TChar(':'));
+			}
+		}
+
+	inline static TRawAddr& Cast(const TSockAddr& aAddr)
+		{
+		return *((TRawAddr *)&aAddr); //lint !e1773 // standard way to implement Cast
+		}
+	inline static TRawAddr& Cast(const TSockAddr* aAddr)
+		{
+		return *((TRawAddr *)aAddr); //lint !e1773 // standard way to implement Cast
+		}
+	};
+
+//
+CIpAdmEngine::~CIpAdmEngine()
+	{
+	//
+	// Ordering is important... Do not close iSS before
+	// all sockets associated with it have been closed!
+	//
+	iFS.Close();
+	iSS.Close();
+	}
+
+void CIpAdmEngine::ConstructL()
+	{
+	//
+	// Start Socket Reader activity
+	//
+	CheckResultL(_L("Active Scheduler"), CActiveScheduler::Current() == NULL);
+	CheckResultL(_L("Connect to File server"), iFS.Connect());
+	CheckResultL(_L("Connect to Socket server"), iSS.Connect());
+	}
+
+
+LOCAL_C void AppendIpAddress(TDes &buf, const TDesC &aLabel, const TInetAddr &aAddr, TInt aSkip = 1)
+	{
+	if (aSkip && aAddr.IsUnspecified())
+		return;
+	TBuf<64> out;
+	buf.Append(aLabel);
+#ifdef HURRICANE_INSOCK
+	aAddr.Output(out);
+#else
+	aAddr.OutputWithScope(out);
+#endif
+	buf.Append(out);
+	}
+
+LOCAL_C void AppendRawAddress(TDes &buf, const TDesC &aLabel, const TSockAddr &aAddr)
+	{
+	if (aAddr.Family() == KAFUnspec)
+		return;
+	TBuf<100> out;
+	buf.Append(aLabel);
+	TRawAddr::Cast(aAddr).Output(out);
+	buf.Append(out);
+	}
+
+LOCAL_C void AppendIpMask(TDes &buf, const TInetAddr &aAddr)
+	{
+	if (aAddr.Family() == KAfInet6)
+		buf.AppendFormat(_L("/%d"), MaskLength(aAddr.Ip6Address()));
+	else
+		buf.AppendFormat(_L("/%d"), MaskLength(aAddr.Address())); 
+	}
+
+void CIpAdmEngine::Show(TInt /*aVersion*/, const TSoInetInterfaceInfo &aInfo)
+	{
+	TBuf<1000> buf;
+	buf = _L("if ");
+	AppendInterfaceStatus(buf, aInfo.iState);
+	AppendInterfaceName(buf, aInfo.iName);
+	AppendIpAddress(buf, _L(" addr="), (const TInetAddr &)aInfo.iAddress, 0);
+	AppendIpMask(buf, (const TInetAddr &)aInfo.iNetMask);
+	AppendIpAddress(buf, _L(" bcast="), (const TInetAddr &)aInfo.iBrdAddr);
+	AppendIpAddress(buf, _L(" gw="), (const TInetAddr &)aInfo.iDefGate);
+	AppendIpAddress(buf, _L(" ns1="), (const TInetAddr &)aInfo.iNameSer1);
+	AppendIpAddress(buf, _L(" ns2="), (const TInetAddr &)aInfo.iNameSer2);
+	AppendRawAddress(buf, _L(" hwa="), aInfo.iHwAddr);
+	buf.AppendFormat(_L(" Mtu=%d, SM=%d, F=%x"), aInfo.iMtu, aInfo.iSpeedMetric, (TUint)aInfo.iFeatures);
+	ShowText(buf);
+	}
+
+void CIpAdmEngine::Show(TInt /*aVersion*/, const TSoInetRouteInfo &aInfo)
+	{
+	TBuf<1000> buf;
+	buf = _L("rt");
+	AppendRouteType(buf, aInfo.iType);
+	AppendRouteState(buf, aInfo.iState);
+	AppendIpAddress(buf, _L(""), (const TInetAddr &)aInfo.iDstAddr, 0);
+	AppendIpMask(buf, (const TInetAddr &)aInfo.iNetMask);
+	// the iIfAddr is actually the src address to be used for this route destination
+	AppendIpAddress(buf, _L(" src="), (const TInetAddr &)aInfo.iIfAddr);
+	if (aInfo.iGateway.Family() == KAfInet6 || aInfo.iGateway.Family() == KAfInet)
+		AppendIpAddress(buf, _L(" gw="), (const TInetAddr &)aInfo.iGateway);
+	else
+		AppendRawAddress(buf, _L(" hwa="), aInfo.iGateway);
+	buf.AppendFormat(_L(" M=%d"), aInfo.iMetric);
+	ShowText(buf);
+	}
+
+void CIpAdmEngine::ListInterfaces(TInt aVersion, const TDesC &aProtocol)
+	{
+	RSocket socket;
+
+	if (CheckResult(aProtocol, socket.Open(iSS, aProtocol)) != KErrNone)
+		return;
+	if (socket.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl) == KErrNone)
+		{
+		TPckgBuf<TSoInetInterfaceInfo> opt;
+		while (socket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, opt) == KErrNone)
+			Show(aVersion, opt());
+		}
+	socket.Close();
+	}
+
+void CIpAdmEngine::ListRoutes(TInt aVersion, const TDesC &aProtocol)
+	{
+	RSocket socket;
+
+	if (CheckResult(aProtocol, socket.Open(iSS, aProtocol)) != KErrNone)
+		return;
+	if (socket.SetOpt(KSoInetEnumRoutes, KSolInetRtCtrl) == KErrNone)
+		{
+		TPckgBuf<TSoInetRouteInfo> opt;
+		while (socket.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, opt) == KErrNone)
+			Show(aVersion, opt());
+		}
+	socket.Close();
+	}
+
+class TParser : public TLex
+	{
+public:
+	TParser(const TDesC &aStr);
+	void NextToken();
+	int SkipSpaceAndMark();
+	TInt ParameterValue(const TDesC &aKey, TInt &aValue, const TInt aDefault = 0);
+	TInt ParameterValue(const TDesC &aKey, TInetAddr &aValue);
+	TLexMark iLine;
+	TLexMark iCurrent;
+	TPtrC iLastLine;
+	TPtrC Line();
+	inline void MarkLine() { iCurrent = iLine; iOpen = 1; }
+	TPtrC iToken;
+	TInt iOpen;
+	TInt iFirst;	// Non-zero, if next token is first in line
+	};
+
+#pragma warning (disable:4097)
+TParser::TParser(const TDesC &aStr) : TLex(aStr), iLine(), iCurrent(), iLastLine(), iToken(), iOpen(0), iFirst(1)
+	{
+	Mark(iLine);
+	MarkLine();
+	}
+#pragma warning (default:4097)
+
+//
+// Return current line as a descriptor
+// (and skip to the next line, if not fully parsed)
+//
+TPtrC TParser::Line()
+	{
+	if (iOpen)
+		{
+		// Line not fully parsed yet, search to the EOL
+		while (!Eos())
+			{
+			TChar ch = Get();
+			if (ch == '\n' || ch == '\r')
+				{
+				iLastLine.Set(MarkedToken(iCurrent));
+				iOpen = 0;
+				Mark(iLine);
+				break;
+				}
+			}
+		}
+	return iLastLine;
+	}
+//
+// Skip white space and mark, including comments!
+//
+int TParser::SkipSpaceAndMark()
+	{
+	TChar ch;
+	TInt comment = 0;
+	TInt newline = 0;
+
+	while (!Eos())
+		{
+		ch = Get();
+		if (ch =='\n')
+			{
+			comment = 0;
+			newline = 1;
+			if (iOpen)
+				{
+				iLastLine.Set(MarkedToken(iCurrent));
+				iOpen = 0;
+				}
+			Mark(iLine);
+			}
+		else if (comment || ch == '#')
+			comment = 1;
+		else if (!ch.IsSpace())
+			{
+			UnGet();
+			break;
+			}
+		}
+	Mark();
+	return newline;
+	}
+
+//
+// Extract Next token and return
+//
+void TParser::NextToken()
+	{
+	if (SkipSpaceAndMark())
+		iFirst = 1;		// New line!
+	if (Eos())
+		{
+		iFirst = -1;
+		return;
+		}
+	while (!Eos())
+		{
+		TChar ch = Peek();
+		if (ch == '#' || ch.IsSpace())
+			break;
+		Inc();
+		}
+	iToken.Set(MarkedToken());
+	iFirst = SkipSpaceAndMark();
+	}
+
+TInt TParser::ParameterValue(const TDesC &aKey, TInt &aValue, const TInt aDefault)
+	{
+	if (aKey.Compare(iToken) != 0)
+		return KErrNotFound;		// Doesn't match, do nothing
+	//
+	// When the keyword matches, return is always KErrNone
+	// (caller must deduce errors by aDefault.
+	//
+	if (iFirst)
+		aValue = aDefault;
+	else if (Val(aValue) == KErrNone)
+		iFirst = SkipSpaceAndMark();
+	else
+		aValue = aDefault;
+	return KErrNone;
+	}
+
+TInt TParser::ParameterValue(const TDesC &aKey, TInetAddr &aValue)
+	{
+	if (aKey.Compare(iToken) != 0)
+		return KErrNotFound;		// Doesn't match, do nothing
+	//
+	// When the keyword matches, return is always KErrNone
+	// (caller must deduce errors by aDefault.
+	//
+	if (!iFirst)
+		{
+		NextToken();
+		if (aValue.Input(iToken) == KErrNone)
+			return KErrNone;
+		}
+	aValue.SetFamily(0);
+	return KErrNone;
+	}
+
+
+void CIpAdmEngine::AddRoutes(const TDesC &aProtocol)
+	{
+	TInt err = KErrNone;
+	RSocket socket;
+
+	if (CheckResult(aProtocol, socket.Open(iSS, aProtocol)) != KErrNone)
+		return;
+
+	HBufC *buf = NULL;
+#ifndef __DATA_CAGING__
+	TRAP(err, buf = UnicodeLoad::LoadL(iFS, DEFAULT_ROUTES_FILE));
+	if (CheckResult(DEFAULT_ROUTES_FILE, err))
+#else // __DATA_CAGING__
+// get private path
+	TFileName filename;
+	RFs theFS;
+
+	theFS.Connect();
+	theFS.PrivatePath(filename);
+	theFS.Close();
+	filename.Append(DEFAULT_ROUTES_FILE);
+
+	TRAP(err, buf = UnicodeLoad::LoadL(iFS, filename));
+	if (CheckResult(filename, err))
+#endif // __DATA_CAGING__
+		{
+		socket.Close();
+		return;
+		}
+	//lint -save -e613 Trapped above
+	TParser inifile(*buf); //lint -restore
+	TInt route_count = 0;
+	TInt if_count = 0;
+	while (!err)
+		{
+		// Skip until first token in line
+		while (inifile.iFirst == 0)
+			inifile.NextToken();
+		if (inifile.iFirst < 0)
+			break;
+
+		//
+		// The route file is a simple list of lines with following format
+		//
+		inifile.NextToken();
+		inifile.MarkLine();
+		if ((inifile.iToken.Compare(_L("route-add")) == 0))
+			{
+			//    route-add destination netmask metric gateway interface
+			//
+			// all except the "metric" are assumed to be addresses
+			//
+			TPckgBuf<TSoInetRouteInfo> opt;
+			opt().iType = ERtUser;
+			opt().iState = ERtReady;
+			opt().iIfAddr.SetFamily(KAFUnspec);
+			for (int i = 0; !err && inifile.iFirst == 0; ++i)
+				{
+				switch (i)
+					{
+					case 0:	// Destination
+						inifile.NextToken();
+						err = (TInetAddr::Cast(opt().iDstAddr)).Input(inifile.iToken);
+						break;
+					case 1: // Netmask
+						inifile.NextToken();
+						err = (TInetAddr::Cast(opt().iNetMask)).Input(inifile.iToken);
+						break;
+					case 2:	// metric
+						err = inifile.Val(opt().iMetric);
+						break;
+					case 3:	// Gateway
+						inifile.NextToken();
+						if (inifile.iToken.Compare(_L("-")) == 0)
+							opt().iGateway.SetFamily(KAFUnspec);
+						else
+							err = (TInetAddr::Cast(opt().iGateway)).Input(inifile.iToken);
+						break;
+					case 4: // Interface
+						inifile.NextToken();
+						if (inifile.iToken.Compare(_L("-")) == 0)
+							opt().iIfAddr.SetFamily(KAFUnspec);
+						else
+							err = (TInetAddr::Cast(opt().iIfAddr)).Input(inifile.iToken);
+						break;
+					default:
+						inifile.NextToken();
+						break;
+					}
+				inifile.SkipSpaceAndMark();
+				}
+			if (err)
+				{
+				ShowText(_L("Syntax error on line"));
+				ShowText(inifile.Line());
+				break;
+				}
+			else if (CheckResult(inifile.Line(), socket.SetOpt(KSoInetAddRoute, KSolInetRtCtrl, opt)) == KErrNone)
+				route_count++;
+			}
+		else if ((inifile.iToken.Compare(_L("ifconfig")) == 0))
+			{
+			//
+			// For now only simple format
+			//
+			//	ifconfig interface [address [remote]] [parameters]
+			//
+			//  perameters can be
+			//
+			//	prefix n	netmask (ip4)/prefix (ip6) [default 32/128]. This *IS* not same
+			//				as Unix ifconfig. Here the value tells whether a "single address"
+			//				or netmask/prefix configuration is to be performed.
+			//
+			//		*NOTE*	prefix splits the bits in the address into two sections: (prefix,id)
+			//				if prefix part is non-ZERO, it will be added as if router had sent
+			//				RA with prefix option with L=1, A=1
+			//				if id part is non-ZERO, it will be processed as interface id (alias
+			//				keyword will control whether this is primary or additional).
+			//
+			//		*NOTE*	prefix 128 => id part is zero length, assumed ZERO
+			//				prefix 0 => prefix part is zero length, and treated as ZERO
+			//
+			//		*NOTE*	If configuring for single address, do not specify prefix!
+			//
+			//	alias		specify additional network address ([address] required)
+			//				'alias' is not present, but [address] is, then the primary
+			//				network address is configured.
+			//	delete		remove specified network address
+			//	down		mark interface down
+			//	up			mark interface up
+			//	metric n	set metric to n
+			//	mtu n		set MTU to n
+			//	ns1 address	nameserver 1 address
+			//	ns2 address	nameserver 2 address
+			//	proxy		speficy address as proxy
+			//	anycast		specify address as anycast
+			//
+
+			TPckgBuf<TSoInet6InterfaceInfo> opt;
+#if 1
+			opt().iDoState = 0;
+			opt().iDoId = 0;
+			opt().iDoPrefix = 0;
+			opt().iDoAnycast = 0;
+#ifndef HURRICANE_INSOCK
+			opt().iDoProxy = 0;
+#endif
+			opt().iAlias = 0;
+			opt().iDelete = 0;
+			opt().iAddress.SetFamily(0);
+			opt().iDefGate.SetFamily(0);
+			opt().iNetMask.SetFamily(0);
+			opt().iNameSer1.SetFamily(0);
+			opt().iNameSer2.SetFamily(0);
+			opt().iMtu = 0;
+			opt().iSpeedMetric = 0;
+#else
+			// unfortunately, this does not work.. "has initialized data" in MARM compile!
+			static const TSoInet6InterfaceInfo init_opt;
+			opt() = init_opt;
+#endif
+			TInt prefix = -1;
+			for (int i = 0; !err && inifile.iFirst == 0; ++i)
+				{
+				inifile.NextToken();
+				switch (i)
+					{
+					case 0:	// Interface Name
+						opt().iName = inifile.iToken;
+						opt().iTag = inifile.iToken;
+						break;
+					case 1: // Address
+						if ((TInetAddr::Cast(opt().iAddress)).Input(inifile.iToken) != KErrNone)
+							{
+							i = 2;	// We won't have remote address either!
+							goto parameters; //lint !e801 // no clean way to do it without goto
+							}
+						break;
+					case 2: // Remote Address
+						if ((TInetAddr::Cast(opt().iDefGate)).Input(inifile.iToken) == KErrNone)
+							break;
+						//lint -fallthrough
+					default:
+parameters:
+						if (opt().iDoState == 0)
+							{
+							if (inifile.iToken.Compare(_L("down")) == 0)
+								{
+								opt().iState = EIfDown;
+								opt().iDoState = 1;
+								break;
+								}
+							if (inifile.iToken.Compare(_L("up")) == 0)
+								{
+								opt().iState = EIfUp;
+								opt().iDoState = 1;
+								break;
+								}
+							}
+						if (opt().iDoAnycast == 0 &&
+#ifndef HURRICANE_INSOCK
+							opt().iDoProxy == 0 &&
+#endif
+							prefix < 0)
+							{
+							// Only one of 'proxy' or 'anycast' can be present. Also, prefix must not
+							// be present.
+							if (inifile.iToken.Compare(_L("anycast")) == 0)
+								{
+								opt().iDoAnycast = 1;
+								break;
+								}
+							else if (inifile.iToken.Compare(_L("proxy")) == 0)
+								{
+#ifndef HURRICANE_INSOCK
+								opt().iDoProxy = 1;
+#endif
+								break;
+								}
+							}
+						if (opt().iNameSer1.Family() == 0 && inifile.ParameterValue(_L("ns1"), opt().iNameSer1) == KErrNone)
+							break;
+						if (opt().iNameSer2.Family() == 0 && inifile.ParameterValue(_L("ns2"), opt().iNameSer2) == KErrNone)
+							break;
+						if (opt().iDelete == 0 && inifile.iToken.Compare(_L("delete")) == 0)
+							{
+							opt().iDelete = 1;
+							break;
+							}
+						if (opt().iAlias == 0 && inifile.iToken.Compare(_L("alias")) == 0)
+							{
+							opt().iAlias = 1;
+							break;
+							}
+						if (opt().iMtu == 0 && inifile.ParameterValue(_L("mtu"), opt().iMtu) == KErrNone)
+							break;
+						if (opt().iSpeedMetric == 0 && inifile.ParameterValue(_L("metric"), opt().iSpeedMetric) == KErrNone)
+							break;
+						if (opt().iDoAnycast == 0 &&
+#ifndef HURRICANE_INSOCK
+							opt().iDoProxy == 0 &&
+#endif
+							prefix < 0 &&
+							inifile.ParameterValue(_L("prefix"), prefix, 129) == KErrNone)
+							{
+							// prefix == 129, if value is missing => Error
+							if (prefix > 128)
+								err = KErrArgument;
+							break;
+							}
+						err = KErrGeneral;
+						break;
+					}
+					inifile.SkipSpaceAndMark();
+				}
+			if (!err)
+				{
+				// Munge the prefix information into TSoInet6InterfaceInfo
+				if (prefix < 0)
+					{
+					// No prefix present, iNetMask is left unspecified,
+					// request "single address" processing (prefix = 128)
+					opt().iDoId = 1;
+					opt().iDoPrefix = 1;
+					}
+				else if (opt().iAddress.Family() == KAfInet && prefix <= 32)
+					{
+					// IPv4 processing -- defines the netmask
+					const TUint32 mask = ~0UL << (32 - prefix);
+					const TUint32 addr = opt().iAddress.Address();
+					TInetAddr::Cast(opt().iNetMask).SetAddress(mask);
+					if (mask & addr)
+						opt().iDoPrefix = 1;
+					if ((~mask) & addr)
+						opt().iDoId = 1;
+					}
+				else if (opt().iAddress.Family() == KAfInet6 && prefix <= 128)
+					{
+					// IPv6 processing
+					TInetAddr p;
+					// Is Prefix part all zeroes?
+					p.Prefix(TInetAddr::Cast(opt().iAddress), prefix);
+					if (!p.Ip6Address().IsUnspecified())
+						opt().iDoPrefix = 1;
+					TInetAddr::Cast(opt().iNetMask).PrefixMask(prefix);
+					// Is Id part all zeroes?
+					p.SetAddress(TInetAddr::Cast(opt().iAddress).Ip6Address());
+					const TIp6Addr addr = p.Ip6Address();
+					const TIp6Addr mask = TInetAddr::Cast(opt().iNetMask).Ip6Address();
+					if ((addr.u.iAddr32[0] & ~mask.u.iAddr32[0]) != 0 ||
+						(addr.u.iAddr32[1] & ~mask.u.iAddr32[1]) != 0 ||
+						(addr.u.iAddr32[2] & ~mask.u.iAddr32[2]) != 0 ||
+						(addr.u.iAddr32[3] & ~mask.u.iAddr32[3]) != 0)
+						opt().iDoId = 1;
+					}
+				else
+					{
+					// incorrect of prefix value
+					err = KErrArgument;
+					}
+				}
+			if (err)
+				{
+				ShowText(_L("Syntax error on line"));
+				ShowText(inifile.Line());
+				break;
+				}
+			else if (CheckResult(inifile.Line(), socket.SetOpt(KSoInetConfigInterface, KSolInetIfCtrl, opt)) == KErrNone)
+				if_count++;
+			}
+#ifndef HURRICANE_INSOCK
+		else if ((inifile.iToken.Compare(_L("setscope")) == 0))
+			{
+			//
+			// For now only simple format
+			//
+			//	setscope interface interface2 level
+			//
+			//  perameters can be
+			//
+			//	interface	the name of the interface to be change
+			//	interface2	the name of the interface to used as a source for the scope values
+			//	scope		the scope of the join point [2..16]
+
+			TPckgBuf<TSoInetIfQuery> opt1;
+			TPckgBuf<TSoInetIfQuery> opt2;
+			TInt scope = -1;
+			TInt i = 0;
+			for (i = 0; !err && inifile.iFirst == 0; ++i)
+				{
+				inifile.NextToken();
+				switch (i)
+					{
+					case 0:	// Interface Name (to modify)
+						opt1().iName = inifile.iToken;
+						err = CheckResult(inifile.iToken, socket.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery, opt1));
+						break;
+					case 1: // Interface Name (the source)
+						opt2().iName = inifile.iToken;
+						err = CheckResult(inifile.iToken, socket.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery, opt2));
+						break;
+					case 2: // Scope Level
+						err = inifile.ParameterValue(_L("level"), scope);
+						break;
+					default:
+						err = KErrArgument;
+						break;
+					}
+				inifile.SkipSpaceAndMark();
+				}
+			if (err || scope < 2 || scope > 16)
+				{
+				ShowText(_L("Syntax error on line"));
+				ShowText(inifile.Line());
+				break;
+				}
+			//
+			// Build a new scope id vector
+			//
+			scope -= 1; // scope array is indexed from 0
+#if 0
+			for (i = 0; ++i < scope;)
+				opt1().iZone[i] = ~opt1().iZone[0];
+			for ( ;scope < STATIC_CAST(TInt, sizeof(opt1().iZone) / sizeof(opt1().iZone[0])); ++scope)
+				opt1().iZone[scope] = opt2().iZone[scope];
+#else
+			opt1().iZone[scope] = opt2().iZone[scope];
+#endif
+			opt1().iIndex = opt1().iZone[0];
+			err = CheckResult(inifile.Line(), socket.SetOpt(KSoInetIfQuerySetScope, KSolInetIfQuery, opt1));
+			}
+#endif
+		}
+	delete buf;
+	TBuf<80> text;
+	text.Format(_L("Added %d routes, configured %d interfaces"), route_count, if_count);
+	ShowText(text);
+	socket.Close();
+	}
+
+void CIpAdmEngine::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EIpAdmInterfaces:
+			ListInterfaces(4,_L("udp"));
+//			ListInterfaces(6,_L("udp6"));
+			break;
+		case EIpAdmRoutes:
+			ListRoutes(4, _L("udp"));
+//			ListRoutes(6, _L("udp6"));
+			break;
+		case EIpAdmAddRoutes:
+			AddRoutes(_L("udp"));
+			break;
+		default:
+			break;
+		}
+	}
+
+
+//
+// CIpAdmEngine::CheckResult
+//	Output success or fail message, returns the error code
+//
+TInt CIpAdmEngine::CheckResult(const TDesC &aText, TInt aResult)
+	{
+	if (aResult == KErrNone)
+		return KErrNone;
+
+	TBuf<100> err;
+	CEikonEnv::Static()->GetErrorText(err, aResult);
+
+	TBuf<200> str(aText);
+	str.AppendFormat(_L(" returned with [%s] "), err.PtrZ());
+	iAppView->Write(str);
+
+	return aResult;
+	}
+//
+// CIpAdmEngine::CheckResultL
+//	Output success or fail message, and Leave if the code is not
+//	KErrNone.
+//
+void CIpAdmEngine::CheckResultL(const TDesC &aText, TInt aResult)
+	{
+	if (CheckResult(aText, aResult) != KErrNone)
+		User::Leave(aResult);
+	}
+
+void CIpAdmEngine::ShowText(const TDesC &aText)
+	{
+	iAppView->Write(aText);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/src/ipadm.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,468 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ipadm.cpp - IP administration tool main module
+//
+
+#include <techview/eikfnlab.h>
+#ifndef CALYPSO
+#include <techview/eikfontd.h>
+#endif
+
+#if EPOC_SDK < 0x06000000
+#include <e32keys.h>
+#include <coemain.h>
+
+#include <eikenv.h>
+#include <eikdef.h>
+#include <eikcmds.hrh>
+#include <techview/eikon.rsg>
+#include <techview/eiklabel.h>
+
+#include <techview/eiktbar.h>
+#include <techview/eikchlst.h>
+#include <techview/eikpgsel.h>
+
+#include <techview/eiklabel.h>
+#endif
+
+#ifdef MAKE_EXE_APPLICATION
+#include <eikstart.h>
+#endif
+
+#include "ipadm.h"
+#include "engine.h"
+
+// 
+// CConsoleControl
+//
+CConsoleControl::~CConsoleControl()
+	{
+	delete iConsole;
+	}
+
+void CConsoleControl::ConstructL(const TPoint& aTopLeft, const TSize& aSize, TInt aFlags)
+	{
+	TRect rect(aTopLeft,aTopLeft + aSize.AsPoint());
+#if EPOC_SDK >= 0x06000000
+	SetRect(rect);
+#else
+	SetRectL(rect);
+#endif
+    iConsole= new (ELeave) CEikConsoleScreen;
+	iConsole->ConstructL(_L("TEST"),aTopLeft,aSize,aFlags,EEikConsWinInPixels);
+	iConsole->SetHistorySizeL(200,0);
+	//iConsole->SetAllPrintable(ETrue);
+	iHistory=200;
+	}
+
+void CConsoleControl::ActivateL()
+	{
+	CCoeControl::ActivateL();
+	iConsole->SetKeepCursorInSight(TRUE);
+	iConsole->DrawCursor();
+	iConsole->SetAtt(ATT_NORMAL);
+	}
+
+void CConsoleControl::HandleCommandL(TInt aCommand)
+	{
+    switch (aCommand)
+		{
+	case EConsolFontDialog:
+#if EPOC_SDK >= 0x06000000
+		{
+#ifndef CALYPSO
+		TCharFormat charFormat;
+		charFormat.iFontSpec = iConsole->Font();
+		TCharFormatMask dummy;
+		if (CEikFontDialog::RunDlgLD(charFormat, dummy))
+			{
+			//charFormat.iFontSpec.iTypeface.SetIsProportional(EFalse);
+			iConsole->SetFontL(charFormat.iFontSpec);
+			}
+#endif
+		}
+#else
+		{
+		TCharFormat charFormat;
+		charFormat.iFontSpec = iConsole->Font();
+		TCharFormatMask dummy;
+		CEikFontDialog* dialog=new(ELeave) CEikFontDialog(charFormat,dummy);
+		if (dialog->ExecuteLD(R_EIK_DIALOG_FONT))
+			{
+			//charFormat.iFontSpec.iTypeface.SetIsProportional(EFalse);
+			iConsole->SetFontL(charFormat.iFontSpec);
+			}
+		}
+#endif
+        break;
+#if 0
+	case EConsolHistory:
+		{
+		CHistoryDialog* dialog2 = new(ELeave) CHistoryDialog(&iHistory);
+		if (dialog2->ExecuteLD(R_KMD_HISTORY_DIALOG))
+			iConsole->SetHistorySizeL(iHistory,0);
+		}
+        break;
+#endif
+    case EConsolScrollNone:
+		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOff);
+        break;
+    case EConsolScrollHor:
+		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto,CEikScrollBarFrame::EOff);
+        break;
+    case EConsolScrollVert:
+		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);
+        break;
+   	case EConsolScrollBoth:
+		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto,CEikScrollBarFrame::EAuto);
+        break;
+	default:
+		break;
+		}
+    }
+
+void CConsoleControl::FocusChanged(TDrawNow aDrawNow)
+	{
+	iConsole->ConsoleControl()->SetFocus(IsFocused(), aDrawNow); 
+	}
+
+void CConsoleControl::ToggleFontStyleAndRedrawL(TMessageControlFontStyle aStyleElement)
+    {
+    switch (aStyleElement)
+        {
+    case EStyleElementColor:
+		if ( iConsole->Att() & ATT_COLORMASK )	// color?
+			iConsole->SetAtt(ATT_NORMAL);	// then set normal
+		else								// else
+			iConsole->SetAtt(4,11);			// set 4 (darkgray) on 11 (lightgray)
+        break;
+    case EStyleElementBold:
+		// clear color flag (just to be sure) and switch bold flag
+		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_BOLD );
+        break;
+    case EStyleElementItalic:
+		// clear color flag (just to be sure) and switch italic flag
+		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_ITALIC );
+        break;
+    case EStyleElementInverse:
+		// clear color flag (just to be sure) and switch inverse flag
+		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_INVERSE );
+        break;
+    case EStyleElementUnderline:
+		// clear color flag (just to be sure) and switch underline flag
+		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_UNDERLINE );
+        break;
+        }
+    }
+
+void CConsoleControl::SetScrollBarVisibilityL(CEikScrollBarFrame::TScrollBarVisibility aHBarVisibility, CEikScrollBarFrame::TScrollBarVisibility aVBarVisibility)
+	{
+	iConsole->SetScrollBarVisibilityL(aHBarVisibility,aVBarVisibility);
+	iConsole->ConsoleControl()->UpdateArea();
+	iConsole->UpdateScrollBars();
+	iConsole->ConsoleControl()->UpdateArea();
+	//TBool b=iConsole->RecalculateSize();
+	}
+
+
+void CConsoleControl::DrawCursor()
+	{
+	iConsole->DrawCursor();
+	}
+
+
+void CConsoleControl::Write(const TDesC &aMsg)
+	{
+	iConsole->Write(aMsg);
+	iConsole->FlushChars();
+	}
+
+CEikConsoleControl *CConsoleControl::ConsoleControl() const
+	{
+	return iConsole->ConsoleControl();
+	}
+
+TBool CConsoleControl::UpdateScrollBars()
+	{
+	return iConsole->UpdateScrollBars();
+	}
+
+void CConsoleControl::ClearScreen()
+	{
+	iConsole->ClearScreen();
+	}
+
+
+void CConsoleControl::Redraw(const TRect &aRect)
+	{
+	iConsole->Redraw(aRect);
+	}
+
+void CConsoleControl::Lf()
+	{
+	iConsole->Lf();
+	}
+
+
+
+// ****************
+// APPLICATION VIEW
+// ****************
+//
+void CIpAdmView::ConstructL(const TRect& aRect)
+    {
+	CreateWindowL();
+#if EPOC_SDK >= 0x06000000
+    SetRect(aRect);
+#else
+    SetRectL(aRect);
+#endif
+    iContext = this;
+	iBrushStyle = CGraphicsContext::ESolidBrush;
+    iBrushColor = KRgbWhite;
+	CreateBigConsoleL(CEikConsoleScreen::ENoInitialCursor);
+
+	StartL();
+	
+    ActivateL();
+    }
+
+void CIpAdmView::CreateBigConsoleL(TInt aFlags)
+	{
+	iConsole =new(ELeave) CConsoleControl;
+//	TRect rect=Rect();
+//	rect.Shrink(3,3);
+	iConsole->ConstructL(Position(),Rect().Size(),aFlags);
+	iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);
+	
+	}
+
+CIpAdmView::~CIpAdmView()
+	{
+	delete iConsole;
+	delete iModel;
+	}
+    
+TInt CIpAdmView::CountComponentControls() const
+	{
+	return 1;
+	}
+
+CCoeControl* CIpAdmView::ComponentControl(TInt aIndex) const
+	{
+	switch (aIndex)
+		{
+	case 0:
+		return iConsole;
+	default:
+		return 0;
+		}
+	}
+
+void CIpAdmView::Draw(const TRect& /*aRect*/) const
+	{
+#if 0
+	CWindowGc& gc = SystemGc();
+	
+	gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	TSize penSizeBold(3,3);
+	gc.SetPenSize(penSizeBold);
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	
+	TRect rect=iConsole->Rect();	//Lines around the Console
+	rect.Grow(3,3);
+	gc.DrawRect(rect);
+#endif
+	}
+
+void CIpAdmView::StartL()
+	{
+	TInt err;
+
+	if (!iModel)
+		{
+		iModel = new CIpAdmEngine(this);
+		CEikonEnv::Static()->BusyMsgL(R_BUSY);
+		TRAP(err, iModel->ConstructL());
+		CEikonEnv::Static()->BusyMsgCancel();
+		if (err!=KErrNone)
+			{
+			TBuf<50> msg;
+			msg.Format(_L("Error initializing: %d"), err);
+			ShowError(msg);
+			StopL();
+			}
+		}
+	else
+		CEikonEnv::Static()->InfoMsg(_L("Already Running!"));
+	}
+
+
+void CIpAdmView::Write(const TDesC &aMsg)
+	{
+	iConsole->Write(aMsg);
+	iConsole->Write(_L("\n"));
+	}
+
+void CIpAdmView::ShowError(TInt aId)
+	{
+	iEikonEnv->InfoMsg(aId);
+	}
+
+void CIpAdmView::ShowError(const TDes &msg)
+	{
+	iEikonEnv->InfoMsg(msg);
+	}
+
+void CIpAdmView::ShowError(const TDes &msg, TInt aErr)
+	{
+	TBuf<100> txt;
+	TBuf<100> txt2;
+
+	txt.Format(msg);
+	iEikonEnv->GetErrorText(txt2,aErr);
+	txt.AppendFormat(txt2);
+	iEikonEnv->InfoMsg(txt);
+	}
+
+void CIpAdmView::StopL()
+	{
+	if (iModel)
+		{
+		CEikonEnv::Static()->BusyMsgL(R_BUSY);
+		delete iModel;	
+		CEikonEnv::Static()->BusyMsgCancel();
+		Write(_L("*Stopped*"));
+		}
+	else
+		CEikonEnv::Static()->InfoMsg(_L("Not running!"));
+	iModel = NULL;
+	}
+
+
+void CIpAdmView::ClearScreenL()
+	{
+	delete iConsole;
+	iConsole = NULL;
+	CreateBigConsoleL(CEikConsoleScreen::ENoInitialCursor);	
+	}
+
+void CIpAdmView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+	case EIpAdmClearScreen:
+		ClearScreenL();
+		break;
+
+	default:
+		ASSERT(iConsole != NULL);
+		iConsole->HandleCommandL(aCommand);
+		if (iModel)
+			iModel->HandleCommandL(aCommand);
+		break;
+		}
+	}
+
+// **************
+// APPLICATION UI
+// **************
+//
+void CIpAdmAppUi::ConstructL()
+    {
+    BaseConstructL();
+
+    iAppView= new (ELeave) CIpAdmView;
+    iAppView->ConstructL(ClientRect());
+
+#if EPOC_SDK < 0x06000000
+	CEikFileNameLabel* filenameLabel=STATIC_CAST(CEikFileNameLabel*, iToolBar->ControlById(EIpAdmFilename));
+	filenameLabel->UpdateL();
+#endif
+    }
+
+void CIpAdmAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+	case EEikCmdExit:
+		Exit();
+		return;
+	default:
+		iAppView->HandleCommandL(aCommand);
+		}
+	}
+
+CIpAdmAppUi::~CIpAdmAppUi()
+	{
+#ifndef CALYPSO
+	RemoveFromStack(iAppView);
+#endif
+    delete iAppView;
+	}
+
+// ********
+// DOCUMENT
+// ********
+CIpAdmDocument::CIpAdmDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+CEikAppUi* CIpAdmDocument::CreateAppUiL()
+	{
+    return new (ELeave) CIpAdmAppUi;
+	}
+
+// ***********
+// APPLICATION
+// ***********
+//
+TUid CIpAdmApplication::AppDllUid() const
+	{
+	return KUidIpAdmApp;
+	}
+
+CApaDocument* CIpAdmApplication::CreateDocumentL()
+	{
+	return new(ELeave) CIpAdmDocument(*this);
+	}
+
+// ****
+// MAIN
+// ****
+//
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CIpAdmApplication;
+	}
+
+
+#ifdef MAKE_EXE_APPLICATION
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
+#else
+
+#ifndef EKA2
+GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
+	{
+	return KErrNone;
+	}
+#endif
+
+#endif // MAKE_EXE_APPLICATION
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/ipadministrationtool/src/uniload.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,90 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// uniload.cpp - universal file load (work for narrow or wide builds)
+//
+
+#include "uniload.h"
+
+HBufC *UnicodeLoad::LoadL(RFs &aFs, const TDesC &aName)
+	{
+	RFile pf;
+	TInt size;
+	User::LeaveIfError(pf.Open(aFs, aName, EFileShareAny));
+	pf.Size(size);
+	//
+	// For narrow build, this allocates exactly right amount
+	// of space, for Unicode build, this allocates the size
+	// doubled in bytes, which is exactly what we want, if
+	// we need to widen the narrow Ascii control file (this
+	// is assumed to be the default case). For UNICODE file
+	// in UNICODE environment, this allocates too much space.
+	//
+	HBufC *data = HBufC::New(size);
+
+	if (data == NULL)
+		{
+		pf.Close();
+		User::Leave(KErrNoMemory);
+		}
+	//
+	// buf is "native" pointer, either 16 or 8 wide
+	//
+	TPtr buf(data->Des());
+#ifdef __WINS__
+	buf.Set(data->Des());		// VC6 kludge
+#endif
+	//
+	// ptr is always 8 wide
+	//
+	TPtr8 ptr((TUint8 *)buf.Ptr(), size, size);
+	pf.Read(ptr);
+	pf.Close();
+
+	if (size >= 2 && ptr[0] == 0xFF && ptr[1] == 0xFE)
+		{
+		//
+		// The file is presented as UNICODE text
+		// (for now, only one byte order supported)
+		//
+		size -= 2;
+#ifdef _UNICODE
+		Mem::Copy((TUint8 *)ptr.Ptr(), ptr.Ptr() + 2, size);
+		buf.SetLength(size / 2);	// True number of Unicode characters.
+#else
+		// Trying to load a Unicode file for Narrow build
+		size = size / 2;
+		for (TInt i = 1; i < size; ++i)
+			{
+			if (ptr[2*i] != 0)
+				ptr[i] = 0x01;	// Substitute too wide stuff with 0x1
+			else
+				ptr[i] = ptr[2*i + 1];
+			}
+		buf.SetLength(size); 
+#endif
+		}
+	else
+		{
+		//
+		// The file is narrow, 8 bit characters
+		//
+		buf.SetLength(size); 
+#ifdef _UNICODE
+		// Must "widen" the characters for unicode.
+		for (TInt i = size; --i >= 0; )
+			buf[i] = ptr[i];
+#endif
+		}
+	return data;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/data/nslookup.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,249 @@
+
+//	nslookup.rss
+
+// 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:
+// SOME PING SPECIFIC STUFF HAS BEEN LEFT IN AS A TEMPLATE FOR
+// IMPLEMENTING SOME ADVANCED NSLOOKUP OPTIONS THAT MAY REQUIRE
+// COMPLEX PANELS! -- msa
+//
+
+
+NAME NAPP
+
+#include <techview/eikon.rh>
+#include <techview/eikon.rsg>
+
+#include "nslookup.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	menubar=r_nslookup_menubar;
+	hotkeys=r_nslookup_hotkeys;
+	toolbar=r_nslookup_toolbar;
+	//cba = r_nslookup_cba;
+	}
+
+
+RESOURCE DIALOG r_nslookup_about	//About Dialog
+	{
+	title="About Nslookup";
+	buttons=R_EIK_BUTTONS_CONTINUE;
+	flags=EEikDialogFlagButtonsBelow;
+	items=
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			prompt="";
+			id=ENslookupAboutText;
+			control=LABEL
+				{
+				txt="EPOC32 Nslookup";
+				};				
+			},
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			prompt="";
+			id=ENslookupAboutText;
+			control=LABEL
+				{
+				txt="By Markku Savela";
+				};				
+			},
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			prompt="";
+			id=ENslookupAboutText;
+			control=LABEL
+				{
+				txt="July 2001";
+				};				
+			}	
+		};
+	}
+
+
+
+RESOURCE DIALOG r_nslookup_hostname
+	{
+	title="EPOC32 Nslookup";
+	buttons=R_EIK_BUTTONS_CANCEL_OK;
+	flags=EEikDialogFlagWait|EEikDialogFlagButtonsBelow|EEikDialogFlagNotifyEsc;
+	items=
+		{
+		DLG_LINE
+			{
+			type=EEikCtEdwin;
+			prompt="Hostname";
+			id=ENslookupHostName;
+			control=EDWIN
+				{
+					width=15;
+					lines=1;
+					maxlength=80;
+					flags=0;
+				};
+			},
+		DLG_LINE
+			{
+            type=EEikCtChoiceList;
+            prompt="Query Type";
+            id=ENslookupQueryType;
+			control=CHOICELIST
+				{
+				array_id=r_querytype_list;
+				};
+			},
+		DLG_LINE
+			{
+            type=EEikCtCheckBox;
+            prompt="Show source address";
+            id=ENslookupShowSource;
+			}
+		};
+	}
+
+
+RESOURCE ARRAY r_querytype_list
+	{
+	items=
+		{
+		LBUF { txt="Default (GetName)"; },
+		LBUF { txt="Query A"; },
+		LBUF { txt="Query NS"; },
+		LBUF { txt="Query CNAME"; },
+		LBUF { txt="Query WKS"; },
+		LBUF { txt="Query PTR"; },
+		LBUF { txt="Query HINFO"; },
+		LBUF { txt="Query MX"; },
+		LBUF { txt="Query TXT"; },
+		LBUF { txt="Query AAAA"; },
+		LBUF { txt="Query SRV"; },
+		LBUF { txt="Query NAPTR"; },
+		LBUF { txt="Query Any"; },
+		LBUF { txt="Clear Cache"; }
+		};
+	}
+
+
+/*
+RESOURCE CBA r_nslookup_cba
+{
+	//LONG flags=EEikButtonGroupAddToStack;
+	//WORD breadth=80; // !!! make this accessible from LAF
+	//LLINK related_buttons=0;
+   	buttons = 
+	{
+		CBA_BUTTON
+		{
+			id=ENslookupStart;
+			txt="Start";
+		},
+		CBA_BUTTON
+		{
+			id=ENslookupStop;
+			txt="Stop";
+		},
+		CBA_BUTTON
+		{
+			id=EEikCmdExit;
+			txt="Exit";
+		}
+	};
+}
+*/
+
+RESOURCE TOOLBAR r_nslookup_toolbar
+	{
+	flags=EEikToolBarDistributeControlsEvenlyBetweenLines;
+	breadth=KEikStdToolBarWidth+8;
+	controls=
+		{
+		TBAR_CTRL 
+			{ 
+			id=ENslookupCmdFileName;
+			type=EEikCtFileNameLabel; 
+			flags=EEikToolBarCtrlHasSetMinLength;
+			length=KEikStdFileNameLabelHeight;
+			},
+		TBAR_BUTTON
+			{
+			flags=EEikToolBarCtrlIsStretchable;
+			id=ENslookupStart;
+			txt="Start";
+			},
+		TBAR_BUTTON
+			{
+			flags=EEikToolBarCtrlIsStretchable;
+			id=ENslookupStop;
+			txt="Stop";
+			},
+        TBAR_BUTTON
+			{
+			flags=EEikToolBarCtrlIsStretchable;
+			id=EEikCmdExit;
+			txt="Exit";
+			}
+		};
+	}  
+
+RESOURCE HOTKEYS r_nslookup_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit; key='e'; },
+		HOTKEY { command=ENslookupStart; key='s'; },
+		HOTKEY { command=ENslookupStop; key='c'; },
+		HOTKEY { command=ENslookupReset; key='r'; },
+		HOTKEY { command=ENslookupAbout; key='a'; }
+        };
+    }
+
+RESOURCE MENU_BAR r_nslookup_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_nslookup_file_menu; txt="File"; },
+        MENU_TITLE { menu_pane=r_nslookup_tools_menu; txt="Tools"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_nslookup_file_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EEikCmdExit; txt="Exit"; }
+        };
+    }
+
+RESOURCE MENU_PANE r_nslookup_tools_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=ENslookupStart; txt="Start"; },
+		MENU_ITEM { command=ENslookupStop; txt="Stop"; },
+		MENU_ITEM { command=ENslookupReset; txt="Reset Screen"; },
+		MENU_ITEM { command=ENslookupAbout; txt="About..."; }
+        };
+    }
+
+RESOURCE TBUF r_resolving_name { buf="Resolving name..."; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/data/nslookup_reg.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,24 @@
+// 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:
+//
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10000892  // nslookup UID
+
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file = "nslookup";
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/group/bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,35 @@
+// 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:
+// bld.inf - Name resolver utility
+// Name resolver utility
+//
+
+
+
+/**
+ @file
+*/
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+
+PRJ_TESTEXPORTS
+../group/nslookup.iby    /epoc32/rom/include/nslookup.iby
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+nslookup.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/group/networking_nslookup.history.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="IP Hook Examples">
+  <purpose>
+  </purpose>
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/group/networking_nslookup.mrp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,24 @@
+#
+# 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: 
+#
+
+component networking_nslookup
+source \sf\app\techview\networkingutils\nameresolverutility
+notes_source \component_defs\release.src
+
+
+# ==   comments appear after the line they describe  ==
+ipr T 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/group/nslookup.iby	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,27 @@
+// 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:
+//
+
+#ifndef __NSLOOKUP_IBY__
+#define __NSLOOKUP_IBY__
+
+REM static dependencies
+#include <esock.iby>
+#include <insock.iby>
+
+file=ABI_DIR\DEBUG_DIR\nslookup.exe                       sys\bin\nslookup.exe
+data=MULTI_LINGUIFY(RSC EPOCROOT##epoc32\data\Z\resource\Apps\nslookup		resource\Apps\nslookup)
+data=MULTI_LINGUIFY(RSC EPOCROOT##epoc32\data\Z\private\10003a3f\Apps\nslookup_reg  private\10003a3f\Apps\nslookup_reg)
+
+#endif // __NSLOOKUP_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/group/nslookup.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,66 @@
+// 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:
+// nslookup.mmp - Name resolver utility
+// Name resolver utility
+//
+
+
+
+/**
+ @file
+*/
+
+MACRO		EPOC_SDK=0x08000000
+MACRO		__RHOSTRESOLV_QUERY_IF
+MACRO		DND_DCM_EXTENSION
+
+TARGET		nslookup.exe
+TARGETTYPE	exe
+MACRO		MAKE_EXE_APPLICATION
+UID		0 0x10000892
+
+EPOCSTACKSIZE	0x5000
+TARGETPATH	/sys/bin
+
+SOURCEPATH	../src
+
+SOURCE		engine.cpp nslookup.cpp
+
+START RESOURCE      ../data/nslookup.rss
+HEADER
+TARGETPATH /resource/apps
+END
+
+START RESOURCE	../data/nslookup_reg.rss
+TARGETPATH /private/10003a3f/apps
+END
+
+USERINCLUDE	../inc
+SYSTEMINCLUDE	../../../../../os/networkingsrv/networkprotocols/iphook/inhook6/inc 
+
+SYSTEMINCLUDE	/epoc32/include/techview
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/networking	// dns_qry.*
+
+LIBRARY		euser.lib apparc.lib ws32.lib 
+LIBRARY		cone.lib
+LIBRARY		esock.lib insock.lib
+LIBRARY		plpremlink.lib
+LIBRARY		eikcore.lib eikcoctl.lib eikdlg.lib
+
+CAPABILITY ALL -Tcb
+
+VENDORID	0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/inc/engine.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,97 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// pingmodel.h - icmp echo client engine
+//
+
+
+
+/**
+ @internalComponent
+*/
+#ifndef __ENGINE_H
+#define __ENGINE_H
+
+#include <es_sock.h>
+#include <in_sock.h>
+
+//#include <nifmbuf.h>
+
+const TInt KHostNameLimit = 80;
+
+class CNslookupContainer;
+
+const TUint KPingQuiet			= 0x01;
+const TUint KPingVerbose		= 0x02;
+const TUint KPingPackLimit		= 0x04;
+const TUint KPingDebug			= 0x08;
+
+//Contains engine's saved preferences
+class TPreferences
+	{
+public:
+	TBuf<80> iHostname;
+	};
+
+
+class CNslookup : public CActive
+	{
+public:
+	CNslookup();
+	~CNslookup();
+	
+	void ConstructL(const TPreferences& aPref);
+
+	//return the current preferences
+	void GetPreferences(TPreferences &aPref) const;
+	static void DefaultPreferences(TPreferences &aPref);
+	void SetConsole(CNslookupContainer *aConsole);
+	const TDesC* GetHostName() const;
+	void SetHostName(const TDes& ahostname);
+	
+	void EndNslookup();
+	TBool IsRunning() const;
+	void BeginL();
+
+protected:
+	void RunL();    //Segment of code to execute
+	void DoCancel();        //Stops Execution of Ping
+
+private:
+	void DisableRemoteLink();
+	void Error(const TDesC& string, TInt error);
+	void Stop();
+
+	/**
+	* Outputs some text about the Resolver Query() response to the console
+	*/
+	void QueryResponse();
+
+private:
+	
+    CNslookupContainer *iConsole;
+	RSocketServ iSockServ;			// Socket Server
+	RHostResolver iHostResolv;		// Resolver
+	TBuf<KHostNameLimit> iHostname;	// Contains name to resolve
+	TInetAddr iAddress;				// Address to reverse
+	TInt iCount;					// Successful resolves.
+	TNameEntry iEntry;	//contains address resolution data
+	TBuf8<1024> iResult;
+	
+public:
+	TInetAddr iHostAddr;		//Address to Ping
+	TUint		iQueryType;		//< Query type select from the dialog choice list.
+	TBool		iShowSource;	//< Show source address for each resolved address.
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/inc/nslookup.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,332 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// nslookup.h - nslookup client main module
+//
+
+
+
+/**
+ @internalComponent
+*/
+#ifndef __NSLOOKUP_H
+#define __NSLOOKUP_H
+
+#include <coecntrl.h>
+#include <coeccntx.h>
+#include <techview/eiklabel.h>
+#include <txtrich.h>
+#include <eikrted.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <techview/eikdialg.h>
+#include <eikdoc.h>
+#include <eikconso.h>
+#ifdef CALYPSO
+#include <AknQueryDialog.h>
+#include <AknSettingItemList.h>
+#include <AknAppUi.h>
+#endif
+
+
+// UID of app
+
+
+const TUid KUidNslookupApp = { 0x10000892 } ;
+const TUid KUidNslookupVersionUid = { 0x10000892 } ;
+
+#ifdef CALYPSO
+
+class CNslookupBinaryPopupSettingItem : public CAknBinaryPopupSettingItem
+	{
+    public:
+        CNslookupBinaryPopupSettingItem( TInt aIdentifier, TBool& aBinaryValue );
+
+        virtual void LoadL();
+	};
+
+class CNslookupTextSettingItem : public CAknSettingItem
+	{
+    public:
+        CNslookupTextSettingItem( TInt aIdentifier, TDes& aText );
+        CNslookupTextSettingItem::~CNslookupTextSettingItem();
+        virtual void StoreL();
+        virtual void LoadL(); // Called from 2nd stage constructors
+        virtual const TDesC& SettingTextL();
+        virtual void EditItemL( TBool aCalledFromMenu );
+
+    protected:
+        TPtr& InternalTextPtr();
+        TPtrC ExternalText();
+        void SetExternalText( TDesC& aNewExternalText );
+
+    private:
+        TDes& iExternalText;
+        HBufC* iInternalText;
+        TPtr iInternalTextPtr;
+	};
+
+class CSettingView : public CAknSettingItemList, public MEikCommandObserver
+	{
+    public:
+        CSettingView(CNslookup *aModel);
+        ~CSettingView();
+        void ConstructL(const TRect& aRect);
+        void ProcessCommandL(TInt aCommand);
+        CAknSettingItem* CreateSettingItemL( TInt identifier );
+        TBool SaveSettingsL();
+
+    private:
+        TBool    iLimitPacketCount;        // Indicates if unlimited packet number
+        TBuf<5>  iMaxPacketCount;          // Number of ICMP Echo Request packets to send
+        TBuf<5>  iPacketDataSize;          // Default data size (not including ICMP header)
+        TBuf<5>  iWaitTime;                // Time between sent packets (default 1 second)
+        TBuf<5>  iLastWaitTime;            // Time to wait for the last packet (default 2 seconds)
+        TBuf<MAX_PATTERN_LENGTH> iPattern; // Pattern to fill the packet (default 0xFF)
+        TBool    iQuiet;                   // No packet info, just statistics
+        TBool    iVerbose;                 // Verbose Output. All ICMP packets, not only Echo reply
+        TBool    iDebug;                   // Set the SO_DEBUG flag in the socket
+
+        CNslookup *iModel;
+	};
+
+#endif // #ifdef CALYPSO
+
+// 
+// CSimpleConsole
+//
+/*
+enum TMessageControlFontStyle
+{
+    EStyleElementBold=EMenuCommandBold,
+    EStyleElementItalic=EMenuCommandItalic,
+    EStyleElementInverse=EMenuCommandInverse,
+    EStyleElementUnderline=EMenuCommandUnderline,
+    EStyleElementColor=EMenuCommandColor
+};
+*/
+class CConsoleControl : public CCoeControl
+{
+public:
+	CConsoleControl() {}
+	~CConsoleControl();
+	//void ConstructL(TInt aFlags);
+	//void ConstructL(TPoint aLeftTop,const TSize& aSize,TInt aFlags,CCoeControl *aParent);
+	void ConstructL(const TPoint& aTopLeft,const TSize& aSize,TInt aFlags);
+    //TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+    //void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+	//void DynInitMenuPaneL(TInt aMenuId,CEikMenuPane* aMenuPane);
+    void HandleCommandL(TInt aCommand);
+    void ActivateL();
+	void SetScrollBarVisibilityL(CEikScrollBarFrame::TScrollBarVisibility aHBarVisibility, CEikScrollBarFrame::TScrollBarVisibility aVBarVisibility);
+	void DrawCursor();
+	void Write(const TDesC &aDes);
+	CEikConsoleControl *ConsoleControl() const;
+	TBool UpdateScrollBars();
+	void ClearScreen();
+	void Redraw(const TRect &aRect);
+	void Lf();
+	TSize ScreenSize() const;
+protected:
+    void FocusChanged(TDrawNow aDrawNow);
+private:
+    //void ToggleFontStyleAndRedrawL(TMessageControlFontStyle aStyleElement);
+	
+private:
+	CEikConsoleScreen* iConsole;
+	TInt iHistory;
+	//TInt iAllPrintable,iScrollLock,iIgnoreCursor,iHideCursor;
+	//TDesC* iSelBufPtr;
+	//TInt iSmallScreen;
+	//TInt iHighCursor;
+};
+
+
+class CNslookupContainer: public CCoeControl, public MCoeControlObserver
+{
+public:
+	  // Construction
+	CNslookupContainer(CNslookup* aModel);
+	void ConstructL(const TRect& aRect);
+
+	  // Destruction
+	~CNslookupContainer();
+	//void ConstructFromResourceL(TResourceReader& aReader);
+	//void CSmileyContainer::PrepareForFocusLossL();
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	void WriteHostL(const TDesC& aHostname);
+	void WriteLine(const TDesC& abuf);
+	void ResetScreen();
+
+//protected:
+	//void FocusChanged(TDrawNow aDrawNow);
+private:
+	  // Virtual, defined by CCoeControl; replaces the default implementation
+	  // provided by CCoeControl.
+	void         Draw(const TRect& aRect) const;
+	
+	  // Virtual, defined by CCoeControl; replaces the default implementation
+	  // provided by CCoeControl. 
+    TInt         CountComponentControls() const;
+
+	  // Virtual, defined by CCoeControl; replaces the default implementation
+	  // provided by CCoeControl.
+	CCoeControl* ComponentControl(TInt aIndex) const;
+
+	  // Defined as pure virtual by the mixin class MCoeControlObserver 
+	  // inherited by CCoeControl. An empty implementation provided by 
+	  // this class (its containees do not report events).
+	void         HandleControlEventL(CCoeControl* aControl,
+		                             TCoeEvent aEventType);
+
+	void CreateConsoleL(const TRect& aRect);
+private:
+	  // Member functions defined and used by this class
+private:
+      // Data members defined and used by this class.
+	CNslookup *iModel;
+	CEikLabel* iLabel; // label for status messages
+	CEikLabel* iLabel2; // label for status messages
+	
+	CConsoleControl* iConsole;
+	};
+
+
+
+
+
+
+//
+// class CNslookupView
+//
+
+class CNslookupView : public CCoeControl, public MCoeControlBrushContext
+    {
+public:
+	CNslookupView(CNslookup *aModel);
+    void ConstructL(const TRect& aRect);
+    ~CNslookupView();
+	// changing view
+	void ConstructViewL();
+	void ResetScreen();
+	// various types of update
+
+
+private: // from CCoeControl
+	void Draw(const TRect& /*aRect*/) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+private: // new function
+	void CreateLabelL();
+private: // data
+	CNslookup *iModel;
+	CNslookupContainer* iContainer;
+    };
+
+#ifdef CALYPSO
+class CHostNameDialog : public CAknTextQueryDialog
+#else
+class CHostNameDialog : public CEikDialog
+#endif
+	{
+public:
+#ifdef CALYPSO
+    CHostNameDialog(TDes& aHostname);
+#else    
+    CHostNameDialog(CNslookup *aModel);
+#endif
+	
+private:
+	TBool OkToExitL(TInt aButton);
+	void PreLayoutDynInitL();
+private:
+	TBool iOKPressed;
+	CNslookup *iModel;
+	};
+
+//
+// CNslookupAppUi
+//
+
+#ifdef CALYPSO
+class CNslookupAppUi : public CAknAppUi
+#else
+class CNslookupAppUi : public CEikAppUi
+#endif
+    {
+public:
+    void ConstructL();
+	~CNslookupAppUi();
+
+#ifdef CALYPSO
+
+private:
+    TBool iAppViewOnStack;
+    TBool iSettingViewOnStack;
+    void AppViewToStackL();
+    void AppViewFromStack();
+    void SettingViewToStackL();
+    void SettingViewFromStack();
+    void ShowAppViewL();
+    void ShowSettingViewL();
+    CSettingView* iSettingView;
+
+#endif // #ifdef CALYPSO
+    
+private: // from CEikAppUi
+	static TInt Launcher(TAny* x);
+	void InitModelL();
+	void HandleCommandL(TInt aCommand);
+	void CreateOptionsDialog();
+	TBool CreateHostNameDialogL();
+	void CreateAboutDialogL() const;
+	void RestorePreferencesL(TPreferences& aPreferences) const;
+	void StorePreferencesL(const TPreferences &aPreferences) const;
+	//void UnDimStop();
+	//void DimStop();
+
+private:
+    CNslookupView* iAppView;
+	CNslookup *iModel;	//contains all related Data
+	//TBossPuzzle* iModel;
+    };
+
+//
+// CExampleShellDocument
+//
+
+class CNslookupDocument : public CEikDocument
+	{
+public:
+	CNslookupDocument(CEikApplication& aApp);
+	//CNslookupDocument(CEikApplication& aApp): CEikDocument(aApp) { }
+	//TBossPuzzle* Model() { return(&iModel); }
+private: // from CEikDocument
+	CEikAppUi* CreateAppUiL();
+private:
+	//TBossPuzzle iModel;
+	};
+
+//
+// CNslookupApplication
+//
+
+class CNslookupApplication : public CEikApplication
+	{
+private: // from CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/inc/nslookup.hrh	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,37 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// nslookup.hrh - nslookup client UI constants
+//
+
+
+
+/**
+ @internalComponent
+*/
+enum TNslookupMenuCommands
+	{
+	ENslookupStart=100,
+	ENslookupStop=101,
+	ENslookupLabel=102,
+	ENslookupHostName=103,
+	ENslookupAbout=104,
+	ENslookupReset=105,
+
+	ENslookupCmdFileName=106,
+	ENslookupQueryType=107,
+	ENslookupShowSource=108,
+
+	// Controls
+	ENslookupAboutText=215
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/src/engine.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,575 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// engine.cpp - nslookup client engine
+//
+
+#include <e32math.h>
+#include <e32std.h>
+#include <eikenv.h>
+#include <plpsess.h>	//Used for RRemoteLink
+#include <networking/dnd_err.h>
+#include <dns_ext.h>
+#include <dns_qry.h>
+#include "engine.h"
+#include <nslookup.rsg>
+#include "nslookup.h"
+
+CNslookup::CNslookup(): CActive(EPriorityStandard)
+	{
+	CActiveScheduler::Add(this);	//Adds itself to the scheduler only the first time
+	}
+
+//Sets the remote link to off
+void CNslookup::DisableRemoteLink()
+	{
+	RRemoteLink link;
+	TRemoteLinkStatus state;
+
+	TInt err=link.Open();
+	if (err==KErrNone)
+		{
+		if (link.Status(state)!=KErrNone)
+			return;
+		if (state.iStatus!=TRemoteLinkStatus::EDisabled)
+			{
+			iConsole->WriteLine(_L("Disabling Remote link\n"));
+			link.Disable(); 
+			}
+		link.Close();
+		}
+	}
+
+//Sets all default values. Actually it's no more a L function
+void CNslookup::ConstructL(const TPreferences& aPref)
+	{
+
+	// Base class second-phase construction.
+
+	iHostname=aPref.iHostname;
+	}
+
+//return the current preferences
+void CNslookup::GetPreferences(TPreferences &aPref) const
+	{	
+	aPref.iHostname=iHostname;		//Address to Ping
+	}
+
+void CNslookup::DefaultPreferences(TPreferences &aPref)
+	{	
+	aPref.iHostname=_L("127.0.0.1");
+	}
+
+
+const TDesC* CNslookup::GetHostName() const
+	{
+	return &iHostname;
+	}
+
+void CNslookup::SetHostName(const TDes& aHostname)
+	{
+	iHostname = aHostname;
+	}
+
+void CNslookup::SetConsole(CNslookupContainer* aConsole)
+	{
+	iConsole = aConsole;
+	}
+
+CNslookup::~CNslookup()
+	{
+	Cancel();
+	}
+
+//Shows the error and set the application as not running. 
+//Requires a return after calling it!
+
+void CNslookup::Error(const TDesC& string,TInt error)
+	{
+	TBuf<150> aux;
+	TBuf<100> errtxt;
+
+	CEikonEnv::Static()->GetErrorText( errtxt,error);
+	aux.Append(string);	
+	aux.Append(_L(": "));
+	aux.Append(errtxt);
+	aux.AppendFormat(_L(" (%d)\n"), error);
+	iConsole->WriteLine(aux);
+	}
+
+
+void CNslookup::Stop()
+	{
+	iHostResolv.Close();
+	iSockServ.Close();
+	CEikonEnv::Static()->BusyMsgCancel();
+	}
+
+
+void CNslookup::BeginL()
+	{
+	TInt err=0;
+
+	if (IsRunning())	// There's another instance running
+		return;
+
+	//INITIALIZATION
+
+	DisableRemoteLink();
+
+	iConsole->WriteHostL(iHostname);
+		
+	//connecting the Socket Server
+	err = iSockServ.Connect();	//KESockDefaultMessageSlots
+	if (err!=KErrNone)
+		{
+		Error(_L("Socket Server Error (Connect)"),err);
+		return;
+		}
+
+	err = iHostResolv.Open(iSockServ, KAfInet, KProtocolInetUdp);	// Address Resolver 
+	if (err != KErrNone)
+		{
+		Error(_L("Resolver Error (Open)"),err);
+		iSockServ.Close();
+		return;
+		}
+	iConsole->WriteLine(_L("\nResolving...\n"));	
+	CEikonEnv::Static()->BusyMsgL(R_RESOLVING_NAME);
+
+	TUint16 querytype = KDnsRRTypeInvalid;
+
+	// This lengthy code checks what the user selected as query type in UI dialog
+	switch (iQueryType)
+		{
+	case 0:		// Default (GetName)
+		break;
+	
+	case 1:		// Query A
+		querytype = KDnsRRTypeA;
+		break;
+		
+	case 2:		// Query NS
+		querytype = KDnsRRTypeNS;
+		break;
+	
+	case 3:		// Query CNAME
+		querytype = KDnsRRTypeCNAME;
+		break;
+	
+	case 4:		// Query WKS
+		querytype = KDnsRRTypeWKS;
+		break;
+	
+	case 5:		// Query PTR
+		querytype = KDnsRRTypePTR;
+		break;
+	
+	case 6:		// Query HINFO
+		querytype = KDnsRRTypeHINFO;
+		break;
+	
+	case 7:		// Query MX
+		querytype = KDnsRRTypeMX;
+		break;
+	
+	case 8:		// Query TXT
+		querytype = KDnsRRTypeTXT;
+		break;
+	
+	case 9:		// Query AAAA
+		querytype = KDnsRRTypeAAAA;
+		break;
+		
+	case 10:	// Query SRV
+		querytype = KDnsRRTypeSRV;
+		break;
+	
+	case 11:	// Query NAPTR
+		querytype = KDnsRRTypeNAPTR;
+		break;
+	
+	case 12:	// Query Any
+		querytype = KDnsQTypeANY;
+		break;
+
+#ifdef DND_DCM_EXTENSION				
+	case 13:	// Cache Clear
+		querytype = KDnsQTypeCacheClear;
+		break;
+#endif
+
+	default:
+		break;
+		}
+		
+	// If query type was something else than default using GetName(), use the new
+	// Query() interface instead
+	if (querytype != KDnsRRTypeInvalid)
+		{
+#ifdef __RHOSTRESOLV_QUERY_IF
+		TBuf8<KHostNameLimit> name8;
+		name8.Copy(iHostname);
+		TDnsQuery query(name8, querytype);
+		TPckgC<TDnsQuery> querybuf(query);	
+
+		// Hmm... Esock seems to use the current length when allocating a buffer for result
+		// output. It should use MaxLength() instead, and now we have to do this to get
+		// over with it
+		iResult.SetLength(iResult.MaxLength());
+		iHostResolv.Query(querybuf, iResult, iStatus);
+#else
+		TBuf<80> aux;
+		aux.Copy(_L("Query() interface not supported\n"));
+		iConsole->WriteLine(aux);
+		iQueryType = 0;
+		Stop();
+		return;
+#endif
+		}
+	else
+		{
+		if (iAddress.Input(iHostname) == KErrNone)
+			{
+			iHostResolv.GetByAddress(iAddress, iEntry, iStatus);
+			}
+		else
+			{
+			iHostResolv.GetByName(iHostname, iEntry, iStatus);
+			}
+		}
+
+	iCount = 0;
+	SetActive();	//Sets the object as Active.
+	}
+
+static TPtrC ErrorTextL(const TInt aCode)
+	{
+	switch (aCode)
+		{
+		case KErrNotFound:			return _L("Name not found");
+
+//		case KErrDndTimedOut:		return _L("timed out");
+//		case KErrDndNoHost:			return _L("no host");	// [dubious error code -- eliminate? ]
+//		case KErrDndNoMemorySend:	return _L("Out of memory on send");
+//		case KErrDndNotSent:		return _L("Query not sent");
+		case KErrDndCache:			return _L("Cache error");
+
+		case KErrDndFormat:			return _L("Bad DNS reply format");
+		case KErrDndServerFailure:	return _L("DNS server failed");
+		case KErrDndBadName:		return _L("Name does not exist in DNS");
+		case KErrDndNotImplemented:	return _L("Query not implemented by DNS server");
+		case KErrDndRefused:		return _L("DNS Server refused query");
+
+//		case KErrDndNoMemoryProc:	return _L("Insufficient memory - can not process the response");
+		case KErrDndNoRecord:		return _L("No record found of the desired type and class"); 
+		case KErrDndNameTooBig:		return _L("Buffer overflow");
+		case KErrDndUnknown:		return _L("Error in DND");
+		case KErrDndServerUnusable:	return _L("No answer available from current server");
+		default:
+			break;
+
+		}
+	User::Leave(aCode);
+	// NOTREACHED
+	return _L("");  // to make compiler happy
+	}
+
+void CNslookup::RunL()
+	{
+	TInt src_addr = 0;
+
+	TBuf<100> textIPaddress;	//text address to be displayed
+	TBuf<356> aux;
+
+	if (iStatus != KErrNone)
+		{
+		if (iCount == 0)
+			{
+			// An error message is only shown, if the primary query
+			// failes, and not for subsequent Next() operations.
+			TBuf<100> msg(iHostname);
+
+			TRAPD(err,
+				TPtrC errText = ErrorTextL(iStatus.Int());
+				msg.AppendFormat(_L(" - %S\n"), &errText));
+			if (err == KErrNone)
+				iConsole->WriteLine(msg);
+			else
+				Error(msg, iStatus.Int());
+			}
+		Stop();
+		return;
+		}	
+
+	// Check if we are using the query interface instead of GetName()
+	if (iQueryType != KDnsRRTypeInvalid)
+		{
+#ifdef __RHOSTRESOLV_QUERY_IF
+		QueryResponse();
+		
+		// See explanation of this SetLength() hack above
+		iResult.SetLength(iResult.MaxLength());
+		iHostResolv.QueryGetNext(iResult, iStatus);
+		iCount++;
+		SetActive();
+#endif		
+		return;
+		}
+
+	aux.Append(iEntry().iName);   // maybe the main name is not the entered
+	switch (iEntry().iAddr.Family())
+		{
+	case KAfInet:
+	case KAfInet6:
+		aux.Append(_L(" is "));
+		iHostAddr = TInetAddr::Cast(iEntry().iAddr);	//host address
+		iHostAddr.Output(textIPaddress);
+		aux.Append(textIPaddress);
+		src_addr = iShowSource && !iHostAddr.IsUnspecified();
+		break;
+	case KAfDns:
+		{
+		SDnsRR &rr = TInetDnsRR::Cast(iEntry().iAddr).RR();
+		if (rr.iClass == 1 /* IN */)
+			{
+			if (rr.iType == 2 /* NS */)
+				{
+				aux.Append(_L(" NS"));
+				break;
+				}
+			else if (rr.iType == 6 /* SOA */)
+				{
+				aux.AppendFormat(_L(" SOA serial=%u refresh=%u retry=%u expire=%u min=%u"),
+					(TUint)rr.iSOA.iSerial,
+					(TUint)rr.iSOA.iRefresh,
+					(TUint)rr.iSOA.iRetry,
+					(TUint)rr.iSOA.iExpire,
+					(TUint)rr.iSOA.iMinimum);
+				break;
+				}
+			else if (rr.iType == 15 /* MX */)
+				{
+				aux.AppendFormat(_L(" MX preference=%d"), (TInt)rr.iMX.iPreference);
+				break;
+				}
+			else if (rr.iType == 33 /* SRV */)
+				{
+				aux.AppendFormat(_L(" SRV port=%d priority=%d weight=%d"),
+					(TInt)iEntry().iAddr.Port(), (TInt)rr.iSRV.iPriority, (TInt)rr.iSRV.iWeight);
+				break;
+				}
+			else if (rr.iType == 35 /* NAPTR */)
+				{
+				TPtrC replacement = rr.iNAPTR.REPLACEMENT(iEntry().iName);
+				TPtrC services = rr.iNAPTR.SERVICES(iEntry().iName);
+				TPtrC regexp = rr.iNAPTR.REGEXP(iEntry().iName);
+
+				aux.AppendFormat(_L(" NAPTR order=%d, preference=%d repl=%S services=%S regexp=%S"),
+					(TInt)rr.iNAPTR.iOrder,
+					(TInt)rr.iNAPTR.iPreference,
+					&replacement,
+					&services,
+					&regexp);
+
+				break;
+				}
+			}
+		aux.AppendFormat(_L(" class=%d type=%d"), (TInt)rr.iClass, (TInt)rr.iType);
+		}
+		break;
+	default:
+		break;
+		}
+
+	const TUint flags = iEntry().iFlags;
+	if (flags)
+		{
+		aux.Append(_L(" ( "));
+		if (flags & EDnsAlias)
+			aux.Append(_L("Alias "));
+		if (flags & EDnsAuthoritive)
+			aux.Append(_L("Authoritative "));
+		if (flags & EDnsHostsFile)
+			aux.Append(_L("Hostfile "));
+		if (flags & EDnsServer)
+			aux.Append(_L("DNS "));
+		if (flags & EDnsHostName)
+			aux.Append(_L("MyName "));
+		if (flags & EDnsCache)
+			aux.Append(_L("Cached "));
+		aux.Append(')');
+		}
+	aux.Append(_L("\n"));
+	iConsole->WriteLine(aux);
+	iCount++;
+	if (src_addr)
+		{
+		// Show a matching SRC address.
+		RSocket socket;
+		TPckgBuf<TSoInetIfQuery> opt;
+		opt().iDstAddr = iHostAddr;
+		if (socket.Open(iSockServ, KAfInet, KSockDatagram, KProtocolInetUdp) == KErrNone)
+			{
+			_LIT(KIsVIF, " (VIF)");
+			_LIT(KIsIF, "");
+			_LIT(KNoRoute, "(no route)");
+
+			(void)socket.GetOpt(KSoInetIfQueryByDstAddr, KSolInetIfQuery, opt);
+			socket.Close();
+			opt().iSrcAddr.OutputWithScope(textIPaddress);
+			aux.Format(_L("   src= %S @ %S%S\n"), &textIPaddress, &opt().iName,
+				opt().iName.Length() == 0 ? &KNoRoute() : opt().iIsUp ? &KIsIF() : &KIsVIF());
+			iConsole->WriteLine(aux);
+			}
+		else
+			iConsole->WriteLine(_L("cannot find src, UDP socket open failed\n"));
+		}
+	//
+	// Get next address
+	//
+	iHostResolv.Next(iEntry, iStatus);
+	SetActive();
+	}
+
+void CNslookup::DoCancel()
+	{
+	// Called only from Cancel() if there is pending resolve going on... (IsActive())
+	iHostResolv.Cancel();
+	}
+
+
+// Outputs some text about the Query() response to the console
+void CNslookup::QueryResponse()
+	{
+	TBuf<256> aux;
+	TBuf<128> addrbuf;
+
+	if (iResult.Length() < (TInt)sizeof(TDnsQryRespBase))
+		{
+		aux.AppendFormat(_L("Malformed response (length: %d)\n"), iResult.Length());
+		return;
+		}
+
+	TDnsQryRespBase *respbase = (TDnsQryRespBase *)iResult.Ptr(); //lint !e826 // area length checked above
+	aux.Append(iHostname);
+	aux.AppendFormat(_L(": cl: %d  ttl: %d  "),
+			respbase->RRClass(), respbase->RRTtl());
+
+	// ugh... I'll do this the hard way: temporary buffer for converting from 8-bit
+	// DNS result descriptors to 16-bit descriptor and the append to output buffer.
+	// A better solution will follow a bit later...
+	switch(respbase->RRType())
+		{
+	case KDnsRRTypeA:
+		{
+		const TDnsRespA *const respA = (TDnsRespA *) respbase;
+		respA->HostAddress().Output(addrbuf);
+		aux.Append(_L("type: A  "));
+		aux.Append(_L("addr: "));
+		aux.Append(addrbuf);
+		}
+		break;
+		
+	case KDnsRRTypeAAAA:
+		{
+		const TDnsRespAAAA *const respAAAA = (TDnsRespAAAA *) respbase;
+		respAAAA->HostAddress().Output(addrbuf);
+		aux.Append(_L("type: AAAA  "));
+		aux.Append(_L("addr: "));
+		aux.Append(addrbuf);
+		}
+		break;
+
+	case KDnsRRTypePTR:
+		{
+		const TDnsRespPTR *const respPTR = (TDnsRespPTR *) respbase;
+		aux.Append(_L("type: PTR  "));
+		aux.Append(_L("name: "));
+		addrbuf.Copy(respPTR->HostName());
+		aux.Append(addrbuf);
+		}
+		break;
+		
+	case KDnsRRTypeMX:
+		{
+		const TDnsRespMX *const respMX = (TDnsRespMX *) respbase;
+		aux.Append(_L("type: MX  "));
+		aux.AppendFormat(_L("pref: %d  "), respMX->Pref());
+		aux.Append(_L("name: "));
+		addrbuf.Copy(respMX->HostName());
+		aux.Append(addrbuf);
+		}
+		break;
+		
+	case KDnsRRTypeSRV:
+		{
+		const TDnsRespSRV *const respSRV = (TDnsRespSRV *) respbase;
+		aux.Append(_L("type: SRV  "));
+		aux.AppendFormat(_L("prio: %d  wght: %d  port: %d  targ: "),
+				respSRV->Priority(), respSRV->Weight(), respSRV->Port());
+		addrbuf.Copy(respSRV->Target());
+		aux.Append(addrbuf);
+		}
+		break;
+		
+	case KDnsRRTypeNAPTR:
+		{
+		const TDnsRespNAPTR *const respNAPTR = (TDnsRespNAPTR *) respbase;
+		aux.Append(_L("type: NAPTR  "));
+		aux.AppendFormat(_L("ordr: %d  pref: %d  flag: "));
+		addrbuf.Copy(respNAPTR->Flags());
+		aux.Append(addrbuf);
+		aux.Append(_L("  serv: "));
+		addrbuf.Copy(respNAPTR->Service());
+		aux.Append(addrbuf);
+		aux.Append(_L("  regx: "));
+		addrbuf.Copy(respNAPTR->Regexp());
+		aux.Append(addrbuf);
+		aux.Append(_L("  repl: "));
+		addrbuf.Copy(respNAPTR->Replacement());
+		aux.Append(addrbuf);
+		}
+		break;
+		
+#ifdef DND_DCM_EXTENSION	
+	case KDnsQTypeCacheClear:
+		{
+		aux.Append(_L("  OK"));
+		break;
+		}
+#endif
+
+	default:
+		aux.AppendFormat(_L("Unknown response type: %d"), respbase->RRType());
+		break;
+		}
+			
+	aux.Append(_L("\n"));
+	iConsole->WriteLine(aux);			
+	}
+
+// Stops NSLOOKUP
+
+void CNslookup::EndNslookup()
+	{	
+	Cancel();
+	Stop();
+	}
+
+// Just checks if sending packets from a previous ping
+
+TBool CNslookup::IsRunning() const
+	{
+	return IsActive();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingutils/nameresolverutility/src/nslookup.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,989 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// nslookup.cpp - nslookup client main module
+//
+
+#include <coemain.h>
+#include <eikenv.h>
+#include <eikdef.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <techview/eikdialg.h>
+#include <eikdoc.h>
+#include <techview/eikchkbx.h>
+#include <techview/eiktbar.h>
+#include <techview/eikedwin.h>
+
+#if EPOC_SDK >= 0x06000000
+#   include <techview/eikon.hrh>
+#else
+#   include <eikdialg.hrh>
+#   include <eikedwin.hrh>
+#   include <eikcmds.hrh>
+#endif
+
+#ifdef MAKE_EXE_APPLICATION
+#include <eikstart.h>
+#endif
+
+#include <nslookup.rsg>
+#include "engine.h"
+#include "nslookup.hrh"
+#include "nslookup.h"
+
+#ifdef CALYPSO
+#include <AknTextSettingPage.h>
+#endif
+
+// 
+// CConsoleControl
+//
+
+
+CConsoleControl::~CConsoleControl()
+	{
+    delete iConsole;
+	}
+
+void CConsoleControl::ConstructL(const TPoint& aTopLeft, const TSize& aSize, TInt aFlags)
+    {
+    TRect rect(aTopLeft,aTopLeft + aSize.AsPoint());
+#if EPOC_SDK >= 0x06000000
+    SetRect(rect);
+#else
+    SetRectL(rect);
+#endif
+    iConsole=new(ELeave) CEikConsoleScreen;
+    iConsole->ConstructL(_L("TEST"),aTopLeft,aSize,aFlags,EEikConsWinInPixels);
+    iConsole->SetHistorySizeL(200,0);
+    iHistory=200;
+    }
+
+void CConsoleControl::ActivateL()
+    {
+    CCoeControl::ActivateL();
+    iConsole->SetKeepCursorInSight(TRUE);
+    iConsole->DrawCursor();
+    iConsole->SetAtt(ATT_NORMAL);
+    }
+
+
+void CConsoleControl::HandleCommandL(TInt /* aCommand */)
+	{
+	}
+
+void CConsoleControl::FocusChanged(TDrawNow aDrawNow)
+	{
+    iConsole->ConsoleControl()->SetFocus(IsFocused(), aDrawNow); 
+	}
+
+
+void CConsoleControl::SetScrollBarVisibilityL(CEikScrollBarFrame::TScrollBarVisibility aHBarVisibility, CEikScrollBarFrame::TScrollBarVisibility aVBarVisibility)
+	{
+    iConsole->SetScrollBarVisibilityL(aHBarVisibility,aVBarVisibility);
+    iConsole->ConsoleControl()->UpdateArea();
+    iConsole->UpdateScrollBars();
+    iConsole->ConsoleControl()->UpdateArea();
+	}
+
+
+void CConsoleControl::DrawCursor()
+	{
+    iConsole->DrawCursor();
+	}
+
+
+void CConsoleControl::Write(const TDesC &aMsg)
+	{
+    iConsole->Write(aMsg);
+    iConsole->FlushChars();
+	}
+
+
+
+CEikConsoleControl *CConsoleControl::ConsoleControl() const
+	{
+    return iConsole->ConsoleControl();
+	}
+
+TBool CConsoleControl::UpdateScrollBars()
+	{
+    return iConsole->UpdateScrollBars();
+	}
+
+void CConsoleControl::ClearScreen()
+	{
+    iConsole->ClearScreen();
+	}
+
+
+void CConsoleControl::Redraw(const TRect &aRect)
+	{
+	iConsole->Redraw(aRect);
+	}
+
+void CConsoleControl::Lf()
+	{
+    iConsole->Lf();
+	}
+
+
+TSize CConsoleControl::ScreenSize() const
+	{
+    return iConsole->ScreenSize();
+	}
+
+
+CNslookupView::CNslookupView(CNslookup *aModel)
+	{
+    iModel = aModel;
+	}
+
+void CNslookupView::ConstructL(const TRect& aRect)
+{
+    CreateWindowL();
+    Window().SetShadowDisabled(ETrue);
+    iContext=this;
+    iBrushStyle=CGraphicsContext::ESolidBrush;
+    iBrushColor=KRgbWhite;
+#if EPOC_SDK >= 0x06000000
+    SetRect(aRect);
+#else
+    SetRectL(aRect);
+#endif
+    
+    // Create its only component, a CNslookupContainer
+    
+    iContainer = new(ELeave) CNslookupContainer(iModel);
+    iContainer->SetContainerWindowL(*this);
+    TRect containerRect = Rect();
+    iContainer->ConstructL(containerRect);
+
+    ActivateL();
+    DrawNow();
+}
+
+CNslookupView::~CNslookupView()
+    {
+
+    delete iContainer;
+    }
+    
+TInt CNslookupView::CountComponentControls() const
+    {   
+    return 1; //Just the container
+    }
+
+CCoeControl* CNslookupView::ComponentControl(TInt /*aIndex*/) const
+    {
+    return iContainer;
+    }
+
+
+void CNslookupView::ResetScreen()
+{
+    iContainer->ResetScreen();
+}
+
+
+TKeyResponse CNslookupView::OfferKeyEventL(const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
+{
+    return EKeyWasNotConsumed;
+}
+
+void CNslookupView::Draw(const TRect& /*aRect*/) const
+    {
+
+    CWindowGc& gc = SystemGc();
+    gc.SetPenStyle(CGraphicsContext::ENullPen);
+    gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+    gc.DrawRect(Rect());
+
+    }
+
+
+//
+// CNslookupcontainer
+//
+const TInt KLabelHeight=25;
+
+
+ // Construction
+CNslookupContainer::CNslookupContainer(CNslookup* aModel)
+	{
+    iModel = aModel;
+	}
+
+
+// Destruction
+CNslookupContainer::~CNslookupContainer()
+{
+    delete iLabel;
+    delete iLabel2;
+    delete iConsole;
+}
+
+void CNslookupContainer::ConstructL(const TRect& aRect)
+{
+    iModel->SetConsole(this);
+
+#if EPOC_SDK >= 0x06000000
+    SetRect(aRect);
+#else
+    SetRectL(aRect);
+#endif
+
+    TRect rect=Rect();
+    rect.iTl.iY += KLabelHeight;    // make way for top label
+    rect.iBr.iY -= KLabelHeight;    // make way for bottom label
+
+    CreateConsoleL(rect);
+
+    //Bottom label
+    iLabel=new (ELeave) CEikLabel;
+    rect=Rect();
+    rect.iTl.iY=rect.iBr.iY-KLabelHeight; // make it bottom 20 pixels
+    iLabel->SetContainerWindowL(*this);
+#if EPOC_SDK >= 0x06000000
+    iLabel->SetRect(rect);
+#else
+    iLabel->SetRectL(rect);
+#endif
+    iLabel->SetAlignment(EHLeftVCenter); // center text
+    iLabel->SetBufferReserveLengthL(500); // nice long buffer
+    iLabel->SetTextL(_L("ok"));			// Label needs to have some content to prevent panics..
+    //Top label
+    iLabel2=new (ELeave) CEikLabel;
+    rect=Rect();
+    rect.iBr.iY=rect.iTl.iY+KLabelHeight; // make it top 20 pixels
+    iLabel2->SetContainerWindowL(*this);
+#if EPOC_SDK >= 0x06000000
+    iLabel2->SetRect(rect);
+#else
+    iLabel2->SetRectL(rect);
+#endif
+    iLabel2->SetAlignment(EHLeftVCenter); // center text
+    iLabel2->SetBufferReserveLengthL(500); // nice long buffer
+    WriteHostL(_L("<None>"));
+    ActivateL();
+}
+
+
+void CNslookupContainer::CreateConsoleL(const TRect& aRect)
+{
+    iConsole = new(ELeave) CConsoleControl;
+#if defined(CRYSTAL)  //This is a patch to put the console in the right place. 
+                //For some unknown reason appears displaced.
+    aRect.iBr.iX += 92;
+    aRect.iTl.iX += 92;
+    iConsole->ConstructL(aRect.iTl, aRect.Size(), CEikConsoleScreen::ENoInitialCursor);
+#elif defined(CALYPSO)
+    TSize size;
+    size.iHeight = aRect.iBr.iY - aRect.iTl.iY;
+    size.iWidth = aRect.iBr.iX - aRect.iTl.iX - 10; // -10 to leave some space on the right
+                                                    // (based on trial and error)
+    TPoint position;
+    position.iY = 70; // To skip the status pane and host name field (based on trial and error)
+    position.iX = 5;  // 5 to leave some space on the left (based on trial and error)
+
+    iConsole->ConstructL(position, size, CEikConsoleScreen::ENoInitialCursor);
+#else
+    iConsole->ConstructL(aRect.iTl, aRect.Size(), CEikConsoleScreen::ENoInitialCursor);    
+#endif
+    
+    iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);
+}
+
+void CNslookupContainer::ResetScreen()
+	{
+    iConsole->ClearScreen();
+	}
+
+void CNslookupContainer::WriteHostL(const TDesC& aHostname)
+{
+    TBuf<100> aux;
+    
+    aux.Append(aHostname);
+
+    iLabel2->SetTextL(aux);
+    iLabel2->DrawNow();
+}
+
+
+void CNslookupContainer::WriteLine(const TDesC& abuf)
+	{
+    iConsole->Write(abuf);
+	}
+
+TKeyResponse CNslookupContainer::OfferKeyEventL(const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
+	{
+    return EKeyWasNotConsumed;
+	}
+
+// Virtual, defined by CCoeControl; replaces the default implementation
+// provided by CCoeControl.
+void CNslookupContainer::Draw(const TRect& aRect) const
+{
+    CWindowGc& gc = SystemGc();
+    gc.SetClippingRect(aRect);
+    gc.DrawRect(Rect());
+
+}
+    
+// Virtual, defined by CCoeControl; replaces the default implementation
+// provided by CCoeControl. 
+TInt CNslookupContainer::CountComponentControls() const
+{
+    return 3;
+}
+
+// Virtual, defined by CCoeControl; replaces the default implementation
+// provided by CCoeControl.
+CCoeControl* CNslookupContainer::ComponentControl(TInt aIndex) const
+{
+    switch (aIndex)
+    {
+    case 0: return iLabel;
+    case 1: return iLabel2;
+    case 2: return iConsole;
+    //case 2: return iEdit;
+	default: break;
+    }
+
+    return NULL;
+}
+
+// Defined as pure virtual by the mixin class MCoeControlObserver 
+// inherited by CCoeControl. An empty implementation provided by 
+// this class (its containees do not report events).
+void CNslookupContainer::HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+{
+
+
+}
+
+
+//
+// CHostNameDialog
+//
+#ifdef CALYPSO
+CHostNameDialog::CHostNameDialog(TDes& aHostname) : CAknTextQueryDialog(aHostname)
+{
+}
+#else
+CHostNameDialog::CHostNameDialog(CNslookup *aModel):CEikDialog()
+{
+    iModel=aModel;
+}
+#endif
+
+// Checks if data entered by user is correct
+// returns ETrue to exit dialog anf EFalse to not exit it (no name entered)
+
+#ifdef CALYPSO
+TBool CHostNameDialog::OkToExitL(TInt aButton)
+{   
+    return CAknTextQueryDialog::OkToExitL(aButton);
+}
+#else
+TBool CHostNameDialog::OkToExitL(TInt aButton)
+{   
+	iModel->iQueryType = ChoiceListCurrentItem(ENslookupQueryType);
+ 	iModel->iShowSource = (CheckBoxState(ENslookupShowSource)== CEikButtonBase::ESet);
+
+    TBuf<KHostNameLimit> hostname(_L(""));
+    if (aButton==EEikBidCancel) //CANCEL BUTTON
+    {
+        iOKPressed=EFalse;
+        return ETrue;
+    }
+    
+    GetEdwinText(hostname,ENslookupHostName);
+    
+    if (hostname.Length()!=0)
+    {
+        iModel->SetHostName(hostname);
+        return ETrue;
+    }
+    else
+        return EFalse;  //If no hostname specified can't continue
+    
+}
+#endif // CALYPSO
+
+//To initialize dialog data
+#ifdef CALYPSO
+void CHostNameDialog::PreLayoutDynInitL()
+{
+    CAknTextQueryDialog::PreLayoutDynInitL();
+}
+#else
+void CHostNameDialog::PreLayoutDynInitL()
+{
+	SetCheckBoxState(ENslookupShowSource, iModel->iShowSource  ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	SetChoiceListCurrentItem(ENslookupQueryType, iModel->iQueryType);
+    SetEdwinTextL(ENslookupHostName,iModel->GetHostName());
+}
+#endif
+
+
+
+//
+// CNslookupAppUi
+//
+
+void CNslookupAppUi::ConstructL()
+{
+    BaseConstructL();
+    
+    InitModelL();
+    iAppView=new(ELeave) CNslookupView(iModel);
+    iAppView->ConstructL(ClientRect());
+
+#if EPOC_SDK < 0x06000000
+    //Just to watch the name of the file on the top of the toolbar
+    CEikFileNameLabel* pingLabel=(CEikFileNameLabel*)iToolBar->ControlById(ENslookupCmdFileName);
+    pingLabel->UpdateL();
+#endif
+
+#ifndef CALYPSO
+    
+    // add app view to stack; enables key event handling.
+    AddToStackL(iAppView);
+    
+#else // if CALYPSO defined
+    
+    AppViewToStackL();
+
+    iAppView->ActivateL();
+
+    iSettingView = new (ELeave) CSettingView(iModel);
+    iSettingView->ConstructL(ClientRect());
+    iSettingView->SetComponentsToInheritVisibility( ETrue );
+
+    SettingViewToStackL();
+
+    iSettingView->ActivateL();
+
+    ShowAppViewL();
+    
+#endif
+}
+
+#ifdef CALYPSO
+
+void CNslookupAppUi::ShowAppViewL()
+{
+    iSettingView->MakeVisible( EFalse );
+    SettingViewFromStack();
+    AppViewToStackL();
+    iAppView->MakeVisible( ETrue );
+    iAppView->DrawNow();
+
+    CEikButtonGroupContainer *cba = ((CAknAppUi*)CEikonEnv::Static()->EikAppUi())->Cba();
+    cba->SetCommandSetL(R_NSLOOKUP_CBA);
+    cba->DrawDeferred();
+
+    // Make sure that setting view's scroll indicators are not shown in the app view
+    iSettingView->ListBox()->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff);
+    iSettingView->ListBox()->UpdateScrollBarsL();
+}
+
+void CNslookupAppUi::ShowSettingViewL()
+{
+    iAppView->MakeVisible( EFalse );
+    AppViewFromStack();
+    SettingViewToStackL();
+    iSettingView->MakeVisible( ETrue );
+    iSettingView->DrawNow();
+
+    CEikButtonGroupContainer *cba = ((CAknAppUi*)CEikonEnv::Static()->EikAppUi())->Cba();
+    cba->SetCommandSetL(R_SETTINGS_CBA);
+    cba->DrawDeferred();
+
+    // Make sure that scroll bars are shown if needed
+    iSettingView->ListBox()->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+    iSettingView->ListBox()->UpdateScrollBarsL();
+}
+
+void CNslookupAppUi::AppViewToStackL()
+{
+    if (!iAppViewOnStack)
+    {
+        AddToStackL(iAppView);
+        iAppViewOnStack = ETrue;
+    }
+}
+
+void CNslookupAppUi::SettingViewToStackL()
+{
+    if (!iSettingViewOnStack)
+    {
+        AddToStackL(iSettingView);
+        iSettingViewOnStack = ETrue;
+    }
+}
+
+void CNslookupAppUi::AppViewFromStack()
+{
+    if (iAppViewOnStack) 
+    {
+        RemoveFromStack(iAppView);
+        iAppViewOnStack = EFalse;
+    }
+}
+
+void CNslookupAppUi::SettingViewFromStack()
+{
+    if (iSettingViewOnStack)
+    {
+        RemoveFromStack(iSettingView);
+        iSettingViewOnStack = EFalse;
+    }
+}
+
+#endif // #ifdef CALYPSO
+
+void CNslookupAppUi::InitModelL()
+{
+    TPreferences param;
+
+    RestorePreferencesL(param); //Reads the .ini file
+
+    iModel= new (ELeave) CNslookup();
+    iModel->ConstructL(param);
+}
+
+void CNslookupAppUi::HandleCommandL(TInt aCommand)
+{
+    TPreferences param;
+    
+    switch (aCommand)
+    {
+    case ENslookupStart:
+        if (!(iModel->IsRunning()))
+            if (CreateHostNameDialogL())
+                iModel->BeginL();
+        break;
+
+    case ENslookupStop: //Stop ping
+        if (iModel->IsRunning())
+            iModel->EndNslookup();
+        break;
+
+    case ENslookupReset:
+        iAppView->ResetScreen();
+        break;
+
+    case ENslookupAbout:
+        CreateAboutDialogL();
+        break;
+
+    case EEikCmdExit:
+        if (iModel->IsRunning())
+            iModel->EndNslookup();
+        iModel->GetPreferences(param);
+        StorePreferencesL(param);
+#ifdef CALYPSO
+        AppViewFromStack();
+        SettingViewFromStack();
+#endif        
+        Exit();
+        return;
+
+#ifdef CALYPSO
+        
+    case ENslookupSave:
+        // Try to save settings data
+        if ( iSettingView->SaveSettingsL() )
+        {
+            // Switch back to the normal view
+            ShowAppViewL();
+        }
+        break;
+
+    case ENslookupCancel:
+        // Simply switch back to the normal view
+        ShowAppViewL();
+        break;
+
+#endif // #ifdef CALYPSO
+
+	default:
+		break;
+    }
+}
+
+    
+// Launches a dialog to show an about box
+void CNslookupAppUi::CreateAboutDialogL() const
+    {
+    CEikDialog* dialog = new (ELeave) CEikDialog();
+    dialog->ExecuteLD(R_NSLOOKUP_ABOUT);    //Final D means the dialog is destructed by itself
+    }
+
+
+//Launches a dialog to specify a hostname and returns if Ok has been pressed to
+//
+#ifdef CALYPSO
+TBool CNslookupAppUi::CreateHostNameDialogL()
+{
+    TBuf<KHostNameLimit> hostname;
+
+    hostname.Copy(*(iModel->GetHostName()));
+
+    CAknTextQueryDialog* dialog = new (ELeave) CHostNameDialog(hostname);
+
+    TInt button = dialog->ExecuteLD(R_NSLOOKUP_HOSTNAME_AVKON);
+
+    if ((button == EAknSoftkeyOk) && (hostname.Length() != 0))
+    {
+        iModel->SetHostName(hostname);
+        return ETrue;
+    }
+    else
+    {
+        return EFalse;
+    }
+}
+#else
+TBool CNslookupAppUi::CreateHostNameDialogL()
+    {
+    CEikDialog* dialog = new (ELeave) CHostNameDialog(iModel);
+    TInt button=dialog->ExecuteLD(R_NSLOOKUP_HOSTNAME); //Final D means the dialog is destructed by itself
+    return (button==EEikBidOk); // If button is CANCEL then the ping is not executed
+    }
+#endif // CALYPSO
+
+void CNslookupAppUi::RestorePreferencesL(TPreferences& aPreferences) const
+{
+	CNslookup::DefaultPreferences(aPreferences);
+}
+
+
+void CNslookupAppUi::StorePreferencesL(const TPreferences & /*aPreferences*/) const
+{
+	// not supported
+}
+
+
+
+CNslookupAppUi::~CNslookupAppUi()
+    {
+#ifndef CALYPSO
+	RemoveFromStack(iAppView);
+#endif
+    delete iAppView;
+#ifdef CALYPSO
+    delete iSettingView;
+#endif
+    delete iModel;
+    }
+
+//
+// CNslookupDocument
+//
+
+CNslookupDocument::CNslookupDocument(CEikApplication& aApp)
+        : CEikDocument(aApp)
+    {
+    }
+
+CEikAppUi* CNslookupDocument::CreateAppUiL()
+    {
+    return(new(ELeave) CNslookupAppUi);
+    }
+
+//
+// CNslookupApplication
+//
+
+TUid CNslookupApplication::AppDllUid() const
+    {
+    return KUidNslookupApp;
+    }
+
+
+CApaDocument* CNslookupApplication::CreateDocumentL()
+    {
+    return new(ELeave) CNslookupDocument(*this);
+    }
+
+//
+// EXPORTed functions
+//
+
+EXPORT_C CApaApplication* NewApplication()
+    {
+    return new CNslookupApplication;
+    }
+
+
+#ifdef MAKE_EXE_APPLICATION
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
+#else
+
+
+#endif // MAKE_EXE_APPLICATION
+
+#ifdef CALYPSO
+
+//------------------------------------------------------------------
+// CNslookupBinaryPopupSettingItem
+//
+// NOTE. This class is implemented only to circumvent
+// a bug (?) in CAknBinaryPopupSettingItem::Load
+//------------------------------------------------------------------
+
+CNslookupBinaryPopupSettingItem::CNslookupBinaryPopupSettingItem( TInt aIdentifier, TBool& aBinaryValue ) :
+   CAknBinaryPopupSettingItem( aIdentifier, aBinaryValue )
+	{
+	}
+
+void CNslookupBinaryPopupSettingItem::LoadL()
+	{
+    // Call CAknEnumeratedTextPopupSettingItem::LoadL to copy
+    // the external boolean value to an internal value
+    // NOTE. CAknBinaryPopupSettingItem::LoadL must NOT be called
+    CAknEnumeratedTextPopupSettingItem::LoadL();
+	}
+
+//-----------------------------------------------------------------
+// CNslookupTextSettingItem
+//
+// NOTE. This is a re-implementation/copy of CAknTextSettingItem
+// (the only difference is in the LoadL method) due to a bug/
+// feature in CAknTextSettingItem::LoadL()
+//-----------------------------------------------------------------
+
+CNslookupTextSettingItem::CNslookupTextSettingItem( TInt aIdentifier, TDes& aText ) : 
+   CAknSettingItem(aIdentifier), iExternalText( aText ), iInternalTextPtr(0,0)
+	{
+	}
+
+CNslookupTextSettingItem::~CNslookupTextSettingItem()
+	{
+    delete iInternalText;
+	}
+
+void CNslookupTextSettingItem::StoreL()
+	{
+    // Copy the internal to the external
+    iExternalText.Copy(iInternalText->Des() );
+	}
+
+// NOTE. This is the only method that has changed from CAknTextSettingItem
+void CNslookupTextSettingItem::LoadL()
+	{
+    delete iInternalText;
+    iInternalText = 0;
+    // NOTE. The difference is below
+    // OLD CODE:
+    // iInternalText = iExternalText.AllocL();
+    // END OF OLD CODE
+    // NEW CODE:
+    iInternalText = HBufC::NewL( iExternalText.MaxLength() );
+    TPtr ptrText = iInternalText->Des();
+    ptrText.Copy( iExternalText );
+    // END OF NEW CODE
+    // Use Set so that the whole TPtr is just overwritten - and gets a new buffer 
+    iInternalTextPtr.Set(iInternalText->Des() );
+	}
+
+const TDesC& CNslookupTextSettingItem::SettingTextL()
+{
+    return *iInternalText;
+}
+
+void CNslookupTextSettingItem::EditItemL( TBool /* aCalledFromMenu */)
+	{
+    CAknSettingPage* dlg = new( ELeave )CAknTextSettingPage( SettingPageResourceId(), iInternalTextPtr, 0 );
+    SetSettingPage( dlg );
+    SettingPage()->SetSettingPageObserver(this);
+    SetUpStandardSettingPageL();
+    SettingPage()->ExecuteLD(CAknSettingPage::EUpdateWhenChanged);
+	}
+
+TPtr& CNslookupTextSettingItem::InternalTextPtr()
+{
+    return iInternalTextPtr;
+}
+
+TPtrC CNslookupTextSettingItem::ExternalText()
+{
+    return (TPtrC)(iExternalText);
+}
+
+void CNslookupTextSettingItem::SetExternalText( TDesC& aNewExternalText )
+{
+    iExternalText.Copy( aNewExternalText );
+}
+
+//-----------------------------------------------------------------
+// CSettingView
+//-----------------------------------------------------------------
+
+void CSettingView::ConstructL(const TRect& /*aRect*/)
+{
+    // Copy data from the model to member variables
+
+    iLimitPacketCount = iModel->iPackLimit ? ETrue : EFalse;
+    iMaxPacketCount.Num( iModel->iTotalPackets );
+    iPacketDataSize.Num( iModel->iPacketDataSize );
+    iWaitTime.Num( iModel->iSecWait );
+    iLastWaitTime.Num( iModel->iLastSecWait );
+
+    iPattern.Copy( iModel->iPattern );
+    iQuiet = iModel->iQuiet ? ETrue : EFalse;
+    iVerbose = iModel->iVerbose ? ETrue : EFalse;
+    iDebug = iModel->iDebug ? ETrue : EFalse;
+
+    CAknSettingItemList::ConstructFromResourceL( R_NSLOOKUP_SETTINGS );
+}
+
+CSettingView::CSettingView(CNslookup *aModel)
+	{
+    iModel = aModel;
+	}
+
+CSettingView::~CSettingView()
+	{
+	}
+
+void CSettingView::ProcessCommandL(TInt /*aCommand*/)
+	{
+	}
+
+CAknSettingItem* CSettingView::CreateSettingItemL( TInt identifier )
+	{
+    CAknSettingItem* settingItem;
+
+    switch (identifier)
+    {
+        case 1:
+            settingItem = new (ELeave) CNslookupBinaryPopupSettingItem( identifier, iLimitPacketCount );
+            return settingItem;
+            break;
+        case 2:
+            settingItem = new (ELeave) CNslookupTextSettingItem( identifier, iMaxPacketCount );
+            return settingItem;
+            break;
+        case 3:
+            settingItem = new (ELeave) CNslookupTextSettingItem(identifier, iPacketDataSize);
+            return settingItem;
+            break;
+        case 4:
+            settingItem = new (ELeave) CNslookupTextSettingItem(identifier, iWaitTime);
+            return settingItem;
+            break;
+        case 5:
+            settingItem = new (ELeave) CNslookupTextSettingItem(identifier, iLastWaitTime);
+            return settingItem;
+            break;
+        case 6:
+            settingItem = new (ELeave) CNslookupTextSettingItem(identifier, iPattern);
+            return settingItem;
+            break;
+        case 7:
+            settingItem = new (ELeave) CNslookupBinaryPopupSettingItem( identifier, iQuiet );
+            return settingItem;
+            break;
+        case 8:
+            settingItem = new (ELeave) CNslookupBinaryPopupSettingItem( identifier, iVerbose );
+            return settingItem;
+            break;
+        case 9:
+            settingItem = new (ELeave) CNslookupBinaryPopupSettingItem( identifier, iDebug );
+            return settingItem;
+            break;
+        default:
+            settingItem = new (ELeave) CAknSettingItem(identifier);
+            return settingItem;
+            break;
+    }
+}
+
+TBool CSettingView::SaveSettingsL()
+	{
+    // Save settings to the member variables
+
+    StoreSettingsL();
+
+    // Validate input
+
+    TLex lex;
+
+    TInt maxPacketCount;
+    lex.Assign( iMaxPacketCount );
+    if ( lex.Val( maxPacketCount ) != KErrNone ) 
+    {
+        CEikonEnv::Static()->InfoMsg(_L("Packet count must be numeric"));
+        return EFalse;
+    }
+
+    TInt packetDataSize;
+    lex.Assign( iPacketDataSize );
+    if ( lex.Val( packetDataSize ) != KErrNone ) 
+    {
+        CEikonEnv::Static()->InfoMsg(_L("Packet size must be numeric"));
+        return EFalse;
+    }
+
+    TInt waitTime;
+    lex.Assign( iWaitTime );
+    if ( lex.Val( waitTime ) != KErrNone ) 
+    {
+        CEikonEnv::Static()->InfoMsg(_L("Wait time must be numeric"));
+        return EFalse;
+    }
+
+    TInt lastWaitTime;
+    lex.Assign( iLastWaitTime );
+    if ( lex.Val( lastWaitTime ) != KErrNone ) 
+    {
+        CEikonEnv::Static()->InfoMsg(_L("Last wait time must be numeric"));
+        return EFalse;
+    }
+
+    lex.Assign( iPattern );
+    while (!lex.Eos())
+    {
+        if (!lex.Get().IsHexDigit())
+        {
+            CEikonEnv::Static()->InfoMsg(_L("Pattern must be hexadecimal"));
+            return EFalse;
+        }
+    }
+
+    // Validation OK, so save settings to the model
+
+    iModel->iPackLimit = iLimitPacketCount;
+    iModel->iTotalPackets = maxPacketCount;
+    iModel->iPacketDataSize = packetDataSize;
+    iModel->iSecWait = waitTime;
+    iModel->iLastSecWait = lastWaitTime;
+    iModel->iPattern.Copy(iPattern);
+    iModel->iQuiet = iQuiet;
+    iModel->iVerbose = iVerbose;
+    iModel->iDebug = iDebug;
+
+    return ETrue;
+}
+    
+#endif // #ifdef CALYPSO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+  <package id="techview" name="Techview" levels="services ui utils apps1 apps2 apps3">
+    <collection id="buildverification" name="Build Verification" level="services">
+     <component id="autosmoketest" name="Auto Smoke Test" filter="gt" purpose="development" introduced="9.1">
+        <unit bldFile="buildverification/autosmoketest/Group" mrp="buildverification/autosmoketest/Group/testtools_autosmoketest.mrp"/>
+      </component>
+      <component id="smoketest" name="Smoke Test" filter="gt" purpose="development">
+        <unit bldFile="buildverification/smoketest/Group" mrp="buildverification/smoketest/Group/testtools_smoketest.mrp"/>
+      </component>
+    </collection>
+    <collection id="techviewplat" name="Techview Platform" level="services">
+      <component id="techviewuiklaf" name="UIKLAF" filter="techview" purpose="development">
+        <unit bldFile="techviewplat/techviewuiklaf/GROUP" mrp="techviewplat/techviewuiklaf/GROUP/techview_uiklaf.mrp" priority="10"/>
+      </component>
+      <component id="eikstdtv" name="EIKSTD" filter="techview" purpose="development">
+        <unit bldFile="techviewplat/eikstd/group" mrp="techviewplat/eikstd/group/techview_eikstd.mrp" priority="20"/>
+      </component>
+      <component id="feps" name="FEPS" filter="techview" purpose="development">
+        <unit bldFile="techviewplat/feps/group" mrp="techviewplat/feps/group/techview_feps.mrp"/>
+      </component>
+    </collection>
+    <collection id="techviewui" name="Techview UI" level="ui">
+      <component id="techviewextras" name="Extras" filter="techview" purpose="development">
+        <unit bldFile="techviewui/techviewextras/group" mrp="techviewui/techviewextras/group/techview_extras.mrp"/>
+      </component>
+      <component id="statuspane" name="Status Pane" filter="techview" purpose="development">
+        <unit bldFile="techviewui/statuspane/group" mrp="techviewui/statuspane/group/techview_statuspane.mrp"/>
+      </component>
+      <component id="shell" name="Shell" filter="techview" purpose="development">
+        <unit bldFile="techviewui/shell/group" mrp="techviewui/shell/group/techview_shell.mrp"/>
+      </component>
+      <component id="startuptv" name="Techview Startup" filter="techview" purpose="development">
+        <unit bldFile="techviewui/startup/group" mrp="techviewui/startup/group/techview_startup.mrp"/>
+      </component>
+    </collection>
+    <collection id="controlpanel" name="Control Panel" level="ui">
+      <component id="fepsetup" name="FEP Setup" filter="techview" purpose="development">
+        <unit bldFile="controlpanel/fepsetup/group" mrp="controlpanel/fepsetup/group/techview_fepsetup.mrp"/>
+      </component>
+      <component id="cctlcolscheme" name="Colour Scheme Control" filter="techview" purpose="development">
+        <unit bldFile="controlpanel/cctlcolscheme/group" mrp="controlpanel/cctlcolscheme/group/techview_cctlcolscheme.mrp"/>
+      </component>
+      <component id="soundsetup" name="Sound Setup" filter="techview" purpose="development">
+        <unit bldFile="controlpanel/soundsetup/group" mrp="controlpanel/soundsetup/group/techview_soundsetup.mrp"/>
+      </component>
+      <component id="keyclickref" name="Key Click Ref" filter="techview" purpose="development" class="plugin">
+        <unit bldFile="controlpanel/keyclickref/Group" mrp="controlpanel/keyclickref/Group/techview_KeyClickRef.mrp"/>
+      </component>
+    </collection>
+    <collection id="pimapps" name="PIM Apps" level="apps3">
+      <component id="contacui" name="Contacts UI" filter="techview" purpose="development">
+        <unit bldFile="pimapps/contacui/group" mrp="pimapps/contacui/group/techview_contacui.mrp" priority="30"/>
+      </component>
+      <component id="agenda" name="Agenda UI" filter="techview" purpose="development">
+        <unit bldFile="pimapps/agenda/group" mrp="pimapps/agenda/group/techview_agenda.mrp"/>
+      </component>
+      <component id="contactstechview" name="Contacts" filter="techview" purpose="development">
+        <unit bldFile="pimapps/contactstechview/group" mrp="pimapps/contactstechview/group/techview_contacts.mrp"/>
+      </component>
+    </collection>
+    <collection id="securityapps" name="Security Apps" level="apps3">
+      <component id="secuitv" name="Techview Security UI" filter="techview" purpose="development">
+        <unit bldFile="securityapps/secui/group" mrp="securityapps/secui/group/techview_secui.mrp"/>
+      </component>
+      <component id="securityupstechview" name="Security UPS Techview" filter="techview" purpose="development" introduced="^3">
+        <unit bldFile="securityapps/securityupstechview/group" mrp="securityapps/securityupstechview/group/security_ups_techview.mrp"/>
+      </component>
+    </collection>
+    <collection id="utilityapps" name="Utility Apps" level="apps2">
+      <component id="helptechview" name="Help" filter="techview" purpose="development">
+        <unit bldFile="utilityapps/helptechview/group" mrp="utilityapps/helptechview/group/techview_help.mrp"/>
+      </component>
+      <component id="timew" name="World Time" filter="techview" purpose="development">
+        <unit bldFile="utilityapps/timew/group" mrp="utilityapps/timew/group/techview_timew.mrp"/>
+      </component>
+      <component id="cpumonitor" name="CPU Monitor" filter="techview" purpose="development" introduced="^3">
+        <unit bldFile="utilityapps/cpumonitor/group" mrp="utilityapps/cpumonitor/group/techview_cpumonitor.mrp"/>
+      </component>
+    </collection>
+    <collection id="installationapps" name="Installation Apps" level="apps2">
+      <component id="installapp" name="Install App" filter="techview" purpose="development">
+        <unit bldFile="installationapps/installapp/group" mrp="installationapps/installapp/group/techview_installapp.mrp"/>
+      </component>
+    </collection>
+    <collection id="messagingapps" name="Messaging Apps" level="apps2">
+      <component id="messagingui" name="Messaging UI" filter="techview" purpose="development">
+        <unit bldFile="messagingapps/messagingui/Group" mrp="messagingapps/messagingui/Group/techview_messagingui.mrp"/>
+      </component>
+    </collection>
+    <collection id="telephonyapps" name="Telephony Apps" level="apps1">
+      <component id="techviewphoneui" name="Phone UI" filter="techview" purpose="development">
+        <unit bldFile="telephonyapps/techviewphoneui/group" mrp="telephonyapps/techviewphoneui/group/techview_phoneui.mrp"/>
+      </component>
+    </collection>
+    <collection id="networkingapps" name="Networking Apps" level="apps1">
+      <component id="iapstatusapp" name="IAP Status App" filter="techview" purpose="development">
+        <unit bldFile="networkingapps/iapstatusapp/group" mrp="networkingapps/iapstatusapp/group/techview_iapstatusapp.mrp"/>
+      </component>
+      <component id="networkingagentnotifier" name="Networking Agent Notifier" filter="techview" introduced="7.0s" purpose="development" class="plugin">
+        <unit bldFile="networkingapps/networkingagentnotifier/group" mrp="networkingapps/networkingagentnotifier/group/techview_networking_agentnotifier.mrp"/>
+      </component>
+      <component id="techviewvpnui" name="VPN UI" filter="techview" introduced="7.0" purpose="development">
+        <unit bldFile="networkingapps/techviewvpnui/group" mrp="networkingapps/techviewvpnui/group/techview_networking_vpnui.mrp"/>
+      </component>
+    </collection>
+    <collection id="networkingutils" name="Networking Utils" level="utils">
+      <component id="ipadministrationtool" name="IP Administration Tool" introduced="7.0" purpose="development" filter="test">
+        <unit mrp="networkingutils/ipadministrationtool/group/networking_ipadm.mrp" bldFile="networkingutils/ipadministrationtool/group"/>
+      </component>
+      <component id="nameresolverutility" name="Name Resolver Utility" introduced="7.0s" purpose="development" filter="test">
+        <unit mrp="networkingutils/nameresolverutility/group/networking_nslookup.mrp" bldFile="networkingutils/nameresolverutility/group"/>
+      </component>
+    </collection>
+    <collection id="shortlinkapps" name="Shortlink Apps" level="apps1">
+      <component id="techviewusbui" name="USB UI" filter="techview" purpose="development">
+        <unit bldFile="shortlinkapps/techviewusbui/group" mrp="shortlinkapps/techviewusbui/group/techview_usbui.mrp"/>
+      </component>
+      <component id="bluetoothui" name="Bluetooth UI" filter="techview" purpose="development">
+        <unit bldFile="shortlinkapps/bluetoothui/group" mrp="shortlinkapps/bluetoothui/group/techview_bluetoothui.mrp"/>
+      </component>
+      <component id="reftsp" name="Remote Control Reference TSP" filter="techview" introduced="9.1" purpose="development" class="plugin">
+		<unit bldFile="shortlinkapps/reftsp/group" mrp="shortlinkapps/reftsp/group/bluetooth_remotecontrol_refTSP.mrp"/>
+      </component>
+    </collection>
+    <collection id="testapps" name="Test Apps" level="utils">
+      <component id="simpleapp" name="Simple App" filter="techview" purpose="development">
+        <unit bldFile="testapps/simpleapp/group" mrp="testapps/simpleapp/group/Techview_SimpleApp.mrp"/>
+      </component>
+      <component id="statdevice" name="STAT Device" filter="techview" purpose="development">
+        <unit bldFile="../../os/buildtools/toolsandutils/statapi/source/statapi/Techview" mrp="../../os/buildtools/toolsandutils/statapi/group/testtools_stat_device_techview.mrp"/>
+      </component>
+      <component id="rschandlerui" name="Resource Handler UI" filter="techview" purpose="development">
+        <unit bldFile="testapps/rschandler/TVResourceHandler/group" mrp="testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_techview.mrp"/>
+      </component>
+      <component id="graphicstestutils" name="Graphics Test Utils" filter="techview" introduced="9.2" purpose="development">
+        <unit bldFile="testapps/graphicstestutils/group" mrp="testapps/graphicstestutils/group/graphics_testutils.mrp"/>
+      </component>
+      <component id="rschandler" name="Resource Handler" deprecated="^3" purpose="development" filter="test">
+        <unit mrp="testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_gt.mrp" bldFile="testapps/rschandler/TVResourceHandler/group"/>
+      </component>
+    </collection>
+    <collection id="avapps" name="A/V Apps" level="apps3">
+      <component id="techviewaudio" name="Audio" filter="techview" purpose="development">
+        <unit bldFile="avapps/techviewaudio/Group" mrp="avapps/techviewaudio/Group/techview_audio.mrp"/>
+      </component>
+    </collection>
+    <collection id="toolkit" name="Toolkit" level="utils">
+      <component id="romkit" name="ROM Kit" filter="techview" purpose="development">
+        <unit bldFile="toolkit/romkit/group" mrp="toolkit/romkit/group/techview_romkit.mrp"/>
+      </component>
+      <component id="romimages" name="ROM Images" filter="techview" purpose="development">
+        <unit version="tb92" bldFile="../../os/deviceplatformrelease/symbianosbld/cedarutils/tb92sfrom_obys" mrp="../../os/deviceplatformrelease/symbianosbld/cedarutils/tb92sfrom_obys/reference_roms_tb92.mrp"/>
+      </component>
+      <component id="configfiles" name="Configuration Files" filter="techview" purpose="development">
+        <unit mrp="toolkit/configfiles/techview_epoc_ini.mrp"/>
+      </component>
+      <component id="cdborphans" name="CDB Orphan File Handler" filter="techview" purpose="development">
+        <unit bldFile="toolkit/cdborphans/group" mrp="toolkit/cdborphans/group/techview_cdb_dummy_orphanheader_checker.mrp"/>
+      </component>
+    </collection>
+    <collection id="techview_info" name="Techview Info" level="apps3">
+      <component id="techview_metadata" name="Techview Metadata" class="config" introduced="^2" purpose="development" target="desktop">
+        <unit mrp="techview_info/techview_metadata/techview_metadata.mrp"/>
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition_v2.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+  <package id="techview" name="Techview" levels="services ui utils apps1 apps2 apps3">
+    <collection id="buildverification" name="Build Verification" level="services">
+     <component id="autosmoketest" name="Auto Smoke Test" filter="gt" purpose="development" introduced="9.1">
+        <unit bldFile="buildverification/autosmoketest/Group" mrp="buildverification/autosmoketest/Group/testtools_autosmoketest.mrp"/>
+      </component>
+      <component id="smoketest" name="Smoke Test" filter="gt" purpose="development">
+        <unit bldFile="buildverification/smoketest/Group" mrp="buildverification/smoketest/Group/testtools_smoketest.mrp"/>
+      </component>
+    </collection>
+    <collection id="techviewplat" name="Techview Platform" level="services">
+      <component id="techviewuiklaf" name="UIKLAF" filter="techview" purpose="development">
+        <unit bldFile="techviewplat/techviewuiklaf/GROUP" mrp="techviewplat/techviewuiklaf/GROUP/techview_uiklaf.mrp" priority="10"/>
+      </component>
+      <component id="eikstdtv" name="EIKSTD" filter="techview" purpose="development">
+        <unit bldFile="techviewplat/eikstd/group" mrp="techviewplat/eikstd/group/techview_eikstd.mrp" priority="20"/>
+      </component>
+      <component id="feps" name="FEPS" filter="techview" purpose="development">
+        <unit bldFile="techviewplat/feps/group" mrp="techviewplat/feps/group/techview_feps.mrp"/>
+      </component>
+    </collection>
+    <collection id="techviewui" name="Techview UI" level="ui">
+      <component id="techviewextras" name="Extras" filter="techview" purpose="development">
+        <unit bldFile="techviewui/techviewextras/group" mrp="techviewui/techviewextras/group/techview_extras.mrp"/>
+      </component>
+      <component id="statuspane" name="Status Pane" filter="techview" purpose="development">
+        <unit bldFile="techviewui/statuspane/group" mrp="techviewui/statuspane/group/techview_statuspane.mrp"/>
+      </component>
+      <component id="shell" name="Shell" filter="techview" purpose="development">
+        <unit bldFile="techviewui/shell/group" mrp="techviewui/shell/group/techview_shell.mrp"/>
+      </component>
+      <component id="startuptv" name="Techview Startup" filter="techview" purpose="development">
+        <unit bldFile="techviewui/startup/group" mrp="techviewui/startup/group/techview_startup.mrp"/>
+      </component>
+    </collection>
+    <collection id="controlpanel" name="Control Panel" level="ui">
+      <component id="fepsetup" name="FEP Setup" filter="techview" purpose="development">
+        <unit bldFile="controlpanel/fepsetup/group" mrp="controlpanel/fepsetup/group/techview_fepsetup.mrp"/>
+      </component>
+      <component id="cctlcolscheme" name="Colour Scheme Control" filter="techview" purpose="development">
+        <unit bldFile="controlpanel/cctlcolscheme/group" mrp="controlpanel/cctlcolscheme/group/techview_cctlcolscheme.mrp"/>
+      </component>
+      <component id="soundsetup" name="Sound Setup" filter="techview" purpose="development">
+        <unit bldFile="controlpanel/soundsetup/group" mrp="controlpanel/soundsetup/group/techview_soundsetup.mrp"/>
+      </component>
+      <component id="keyclickref" name="Key Click Ref" filter="techview" purpose="development" class="plugin">
+        <unit bldFile="controlpanel/keyclickref/Group" mrp="controlpanel/keyclickref/Group/techview_KeyClickRef.mrp"/>
+      </component>
+    </collection>
+    <collection id="pimapps" name="PIM Apps" level="apps3">
+      <component id="contacui" name="Contacts UI" filter="techview" purpose="development">
+        <unit bldFile="pimapps/contacui/group" mrp="pimapps/contacui/group/techview_contacui.mrp" priority="30"/>
+      </component>
+      <component id="agenda" name="Agenda UI" filter="techview" purpose="development">
+        <unit bldFile="pimapps/agenda/group" mrp="pimapps/agenda/group/techview_agenda.mrp"/>
+      </component>
+      <component id="contactstechview" name="Contacts" filter="techview" purpose="development">
+        <unit bldFile="pimapps/contactstechview/group" mrp="pimapps/contactstechview/group/techview_contacts.mrp"/>
+      </component>
+    </collection>
+    <collection id="securityapps" name="Security Apps" level="apps3">
+      <component id="secuitv" name="Techview Security UI" filter="techview" purpose="development">
+        <unit bldFile="securityapps/secui/group" mrp="securityapps/secui/group/techview_secui.mrp"/>
+      </component>
+      <component id="securityupstechview" name="Security UPS Techview" filter="techview" purpose="development" introduced="^3">
+        <unit bldFile="securityapps/securityupstechview/group" mrp="securityapps/securityupstechview/group/security_ups_techview.mrp"/>
+      </component>
+    </collection>
+    <collection id="utilityapps" name="Utility Apps" level="apps2">
+      <component id="helptechview" name="Help" filter="techview" purpose="development">
+        <unit bldFile="utilityapps/helptechview/group" mrp="utilityapps/helptechview/group/techview_help.mrp"/>
+      </component>
+      <component id="timew" name="World Time" filter="techview" purpose="development">
+        <unit bldFile="utilityapps/timew/group" mrp="utilityapps/timew/group/techview_timew.mrp"/>
+      </component>
+      <component id="cpumonitor" name="CPU Monitor" filter="techview" purpose="development" introduced="^3">
+        <unit bldFile="utilityapps/cpumonitor/group" mrp="utilityapps/cpumonitor/group/techview_cpumonitor.mrp"/>
+      </component>
+    </collection>
+    <collection id="installationapps" name="Installation Apps" level="apps2">
+      <component id="installapp" name="Install App" filter="techview" purpose="development">
+        <unit bldFile="installationapps/installapp/group" mrp="installationapps/installapp/group/techview_installapp.mrp"/>
+      </component>
+    </collection>
+    <collection id="messagingapps" name="Messaging Apps" level="apps2">
+      <component id="messagingui" name="Messaging UI" filter="techview" purpose="development">
+        <unit bldFile="messagingapps/messagingui/Group" mrp="messagingapps/messagingui/Group/techview_messagingui.mrp"/>
+      </component>
+    </collection>
+    <collection id="telephonyapps" name="Telephony Apps" level="apps1">
+      <component id="techviewphoneui" name="Phone UI" filter="techview" purpose="development">
+        <unit bldFile="telephonyapps/techviewphoneui/group" mrp="telephonyapps/techviewphoneui/group/techview_phoneui.mrp"/>
+      </component>
+    </collection>
+    <collection id="networkingapps" name="Networking Apps" level="apps1">
+      <component id="iapstatusapp" name="IAP Status App" filter="techview" purpose="development">
+        <unit bldFile="networkingapps/iapstatusapp/group" mrp="networkingapps/iapstatusapp/group/techview_iapstatusapp.mrp"/>
+      </component>
+      <component id="networkingagentnotifier" name="Networking Agent Notifier" filter="techview" introduced="7.0s" purpose="development" class="plugin">
+        <unit bldFile="networkingapps/networkingagentnotifier/group" mrp="networkingapps/networkingagentnotifier/group/techview_networking_agentnotifier.mrp"/>
+      </component>
+      <component id="techviewvpnui" name="VPN UI" filter="techview" introduced="7.0" purpose="development">
+        <unit bldFile="networkingapps/techviewvpnui/group" mrp="networkingapps/techviewvpnui/group/techview_networking_vpnui.mrp"/>
+      </component>
+    </collection>
+    <collection id="networkingutils" name="Networking Utils" level="utils">
+      <component id="ipadministrationtool" name="IP Administration Tool" introduced="7.0" purpose="development" filter="test">
+        <unit mrp="networkingutils/ipadministrationtool/group/networking_ipadm.mrp" bldFile="networkingutils/ipadministrationtool/group"/>
+      </component>
+      <component id="nameresolverutility" name="Name Resolver Utility" introduced="7.0s" purpose="development" filter="test">
+        <unit mrp="networkingutils/nameresolverutility/group/networking_nslookup.mrp" bldFile="networkingutils/nameresolverutility/group"/>
+      </component>
+    </collection>
+    <collection id="shortlinkapps" name="Shortlink Apps" level="apps1">
+      <component id="techviewusbui" name="USB UI" filter="techview" purpose="development">
+        <unit bldFile="shortlinkapps/techviewusbui/group" mrp="shortlinkapps/techviewusbui/group/techview_usbui.mrp"/>
+      </component>
+      <component id="bluetoothui" name="Bluetooth UI" filter="techview" purpose="development">
+        <unit bldFile="shortlinkapps/bluetoothui/group" mrp="shortlinkapps/bluetoothui/group/techview_bluetoothui.mrp"/>
+      </component>
+      <component id="reftsp" name="Remote Control Reference TSP" filter="techview" introduced="9.1" purpose="development" class="plugin">
+		<unit bldFile="shortlinkapps/reftsp/group" mrp="shortlinkapps/reftsp/group/bluetooth_remotecontrol_refTSP.mrp"/>
+      </component>
+    </collection>
+    <collection id="testapps" name="Test Apps" level="utils">
+      <component id="simpleapp" name="Simple App" filter="techview" purpose="development">
+        <unit bldFile="testapps/simpleapp/group" mrp="testapps/simpleapp/group/Techview_SimpleApp.mrp"/>
+      </component>
+      <component id="statdevice" name="STAT Device" filter="techview" purpose="development">
+        <unit bldFile="../../os/buildtools/toolsandutils/statapi/source/statapi/Techview" mrp="../../os/buildtools/toolsandutils/statapi/group/testtools_stat_device_techview.mrp"/>
+      </component>
+      <component id="rschandlerui" name="Resource Handler UI" filter="techview" purpose="development">
+        <unit bldFile="testapps/rschandler/TVResourceHandler/group" mrp="testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_techview.mrp"/>
+      </component>
+      <component id="graphicstestutils" name="Graphics Test Utils" filter="techview" introduced="9.2" purpose="development">
+        <unit bldFile="testapps/graphicstestutils/group" mrp="testapps/graphicstestutils/group/graphics_testutils.mrp"/>
+      </component>
+      <component id="rschandler" name="Resource Handler" deprecated="^3" purpose="development" filter="test">
+        <unit mrp="testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_gt.mrp" bldFile="testapps/rschandler/TVResourceHandler/group"/>
+      </component>
+    </collection>
+    <collection id="avapps" name="A/V Apps" level="apps3">
+      <component id="techviewaudio" name="Audio" filter="techview" purpose="development">
+        <unit bldFile="avapps/techviewaudio/Group" mrp="avapps/techviewaudio/Group/techview_audio.mrp"/>
+      </component>
+    </collection>
+    <collection id="toolkit" name="Toolkit" level="utils">
+      <component id="romkit" name="ROM Kit" filter="techview" purpose="development">
+        <unit bldFile="toolkit/romkit/group" mrp="toolkit/romkit/group/techview_romkit.mrp"/>
+      </component>
+      <component id="romimages" name="ROM Images" filter="techview" purpose="development">
+        <unit version="tb101sf" bldFile="../../os/deviceplatformrelease/symbianosbld/cedarutils/tb101sfrom_obys" mrp="../../os/deviceplatformrelease/symbianosbld/cedarutils/tb101sfrom_obys/reference_roms_tb101sf.mrp"/>
+      </component>
+      <component id="configfiles" name="Configuration Files" filter="techview" purpose="development">
+        <unit mrp="toolkit/configfiles/techview_epoc_ini.mrp"/>
+      </component>
+
+    </collection>
+    <collection id="techview_info" name="Techview Info" level="apps3">
+      <component id="techview_metadata" name="Techview Metadata" class="config" introduced="^2" purpose="development" target="desktop">
+        <unit mrp="techview_info/techview_metadata/techview_metadata.mrp"/>
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/techview_info/techview_metadata/techview_metadata.mrp	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+#
+
+component           techview_metadata
+source   \sf\app\techview\techview_info\techview_metadata 
+source   \sf\app\techview\package_definition.xml
+source   \sf\app\techview\distribution.policy.s60
+source   \sf\app\techview\package_definition_v2.xml
+notes_source      \component_defs\release.src
+ipr T 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/inc/ResourceHandler.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,356 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __ResourceHandler_H
+#define __ResourceHandler_H
+
+
+#include "ResourceHandler.hrh"
+//for storing resource data
+#include "ResourceHandler_DataStructs.h"
+
+#include <apgwgnam.h>
+#include <apgtask.h>
+ 
+#include <coeccntx.h>
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <techview/eikmenup.h>
+
+#include "ResourceHandler_Dialogs.h" // may not need for S60
+
+#include <resourcehandler.rsg>
+#include <techview/eikchkbx.h>
+#include <techview/eikchlst.h>
+#include <techview/eiklbbut.h>
+
+#include <techview/eiklabel.h>
+#include <techview/eikcmbut.h>
+
+#ifdef UIQ
+#include <qiknumbereditor.h>
+#include <qikvertoptionbuttonlist.h>
+#endif
+
+
+#ifdef TV
+
+#include <techview/eikhopbt.h>
+// for CEikNumberEditor
+#include <techview/eikmfne.h>
+// for CEikButtonGroupContainer
+#include <techview/eikbtgpc.h>
+// for CEikNumberEditor
+#include <techview/eikmfne.h>
+#endif
+
+#include <techview/eikclb.h> //for column list box
+#include <techview/eikclbd.h> // for CColumnListBoxData in TV/UIQ
+
+#include <resourcehandler.rsg>
+// for CEikButtonGroupContainer
+#include <techview/eikbtgpc.h>
+
+#include <techview/eikon.hrh>
+
+#include <e32base.h>
+#include <e32cons.h>
+#include <e32hal.h>
+#include <hal.h>
+#include <txtfmlyr.h>
+#include <txtrich.h>
+#include <miutset.h>
+#include <mtmuids.h>
+#include <msvreg.h> 
+#include <msvuids.h>
+#include <techview/eikedwin.h>
+#include <smut.h>
+#include <f32file.h>
+#include <f32dbg.h>
+
+
+// copy from k32std.h
+#define KHARDWARE		0x00000001
+#define KBOOT			0x00000002
+#define KSERVER			0x00000004
+#define KMMU			0x00000008
+#define KSEMAPHORE		0x00000010
+#define KSCHED			0x00000020
+#define KPROC			0x00000040
+#define KEXEC			0x00000080
+#define KEXECFAST		0x00000100
+#define KTHREAD			0x00000200
+#define KDLL			0x00000400
+#define KLOGON			0x00000800
+#define KPBUS1			0x00001000
+#define KPBUS2			0x00002000
+#define KPBUSDRV		0x00004000
+#define KPOWER			0x00008000
+#define KTIMING			0x00010000
+#define KEVENT			0x00020000
+#define KMEMTRACE		0x00080000  
+#define KIPC			0x00100000	
+#define KDEBUGGER		0x00200000  
+#define	KVIDEO			0x00800000	
+#define KUSB            0x01000000  
+#define KPANIC			0x80000000
+
+_LIT(KFormatDec, "%d");
+_LIT(KFormatDec64, "%ld");
+_LIT(KFormatUDec,"%u");
+_LIT(KFormatHex, "%x");
+_LIT(KAsterisk, "*");
+_LIT(KFillName, "ResMan");
+
+enum TMemorySizes
+{
+	K4k		=	0x00001000, //   4,096
+	K8k		=	0x00002000, //   8,192
+	K16k	=	0x00004000, //  16,384
+	K32k	=	0x00008000, 
+	K64k	=	0x00010000, //  65,536
+	K128k	=	0x00020000,
+	K256k	=	0x00040000, // 262,144
+	K512k	=	0x00080000,
+	K1M		=	0x00100000,
+	K2M		=	0x00200000,
+	K4M		=	0x00400000,
+	K8M		=	0x00800000, //8,388,608
+	K16M	=	0x01000000	
+};
+
+enum TObjectsViewed
+	{
+	EObjectNone,
+	EObjectProcess,
+	EObjectThread,
+	EObjectChunk,
+	EObjectLibrary,
+	EObjectServer,
+	EObjectSemaphore,
+	EObjectMutex,
+	EObjectLogicalDevice,
+	EObjectPhysicalDevice,
+	EObjectLogicalChannel,
+	EObjectWindow,
+	EObjectDrive,
+	EObjectHal
+	};
+
+// Forward declarations
+
+class CResourceAppUi;
+class CResourceAppView;
+class CResourceListView;
+class CResourceView;
+
+//
+//
+// CResourceApplication
+//
+//
+
+class CResourceApplication :  public CXKNAPPLICATION
+	{
+private: 
+	           // Inherited from class CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+//
+//
+// CResourceDocument
+//
+//
+class CResourceDocument : public CXKNDOCUMENT
+	{
+public:
+	static CResourceDocument* NewL(CEikApplication& aApp);
+	CResourceDocument(CEikApplication& aApp);
+	void ConstructL();
+private: 
+	           // Inherited from CXKNDOCUMENT
+	CEikAppUi* CreateAppUiL();
+	};
+//
+//
+// CResourceAppUi
+//
+//
+class CResourceAppUi : public CXKNAPPUI
+    {
+public:
+    void ConstructL();
+	~CResourceAppUi();
+
+private:
+	// Inherited from class CXKNAPPUI
+	void HandleCommandL(TInt aCommand);
+	
+private:
+	CResourceView* iListBoxView;
+	void SetProcess(void);
+	void SetThread(void);
+	void SetDebug(void);
+	void SetRam(void);
+	void SetDrive(void);
+
+	void AppendDesc(TDes& root, TDes& add);
+
+	};
+
+//
+//
+// CResourceDetails - stores resource names and details.
+// Used for resources for which not just the name but additional
+// details are displayed.
+//
+//
+class TResourceDetails
+{
+protected:
+	TProcessData iProcessData;
+	TThreadData iThreadData;
+	TChunkData iChunkData;
+	TSemaphoreData iSemaphoreData;
+	TMutexData iMutexData;
+	TDriveData iDriveData;
+	THalData iHalData;
+	TListData iListData;
+	void GetProcessData(TDesC& aProcessName);
+	void GetThreadData(TDesC& aThreadName);
+	void GetChunkData(TFindChunk findHb, TDesC& aChunkName);
+	void GetSemaphoreData(TFindSemaphore& findHb, TDesC& aSemaphoreName);
+	void GetMutexData(TFindMutex& findHb, TDesC& aMutexName);
+	void GetDriveData(TInt aValidDriveNum, TDriveUnit aDriveUnit, TVolumeInfo aVolumeInfo);
+	void GetHalData(TInt aEntryNum, HAL::SEntry*);
+private:
+	void AppendDotsToResourceName(TFullName& aResourceName);
+
+};
+//
+//
+// CResourceList
+//
+//
+class CResourceList: public CCoeControl, public MCoeControlObserver, public TResourceDetails
+{
+public:
+	void ConstructL(TInt aTablePosition);
+	~CResourceList();
+protected:
+	void UpdateResourceCount(TUint aNumberOfResource) {iResourceCount = aNumberOfResource;}
+	void UpdateListData();
+
+	CCoeControl* GetListBox() const;
+
+private:
+	void SetUpProcessTable();
+	void SetUpThreadTable();
+	void SetUpChunkTable();
+	void SetUpSemaphoreTable();
+	void SetUpMutexTable();
+	void SetUpDriveTable();
+	void SetUpHalTable();
+	void SetUpList(); //uses single column tables
+
+	void GetResourceList();
+	void AddRow(const TProcessData& aProcessData);
+	void AddRow(const TThreadData& aThreadData);
+	void AddRow(const TChunkData& aChunkData);
+	void AddRow(const TSemaphoreData& aSemaphoreData);
+	void AddRow(const TMutexData& aMutexData);
+	void AddRow(const TDriveData& aDriveData);
+	void AddRow(const THalData& aHalData);
+	void AddRow(const TListData& aListData);
+
+	void GetThreadList(void);
+	void GetProcessList(void);
+	void GetChunkList(void);
+	void GetLibraryList(void);
+	void GetServerList(void);
+	void GetSemaphoreList(void);
+	void GetMutexList(void);
+	void GetLogicalDeviceList(void);
+	void GetPhysicalDeviceList(void);
+	void GetLogicalChannelList(void);
+	void GetWindowList(void);
+	void GetDriveList(void);
+	void GetHalList(void);
+
+	void EmptyList();
+	
+	CEikColumnListBox* iListBox;
+	CTextListBoxModel* iModel;
+	MDesCArray* iTextArray;
+	CDesCArray* iListBoxItems;
+	CColumnListBoxData* iListBoxData;
+protected:
+	TInt iBorder;
+	TUint iResourceCount; // Count of number of items in table
+	TObjectsViewed iObjectsViewed; // What view is showing
+
+};
+ 
+//
+//
+// CResourceView
+//
+//
+class CResourceView : public CResourceList
+    {
+public:
+	static CResourceView* NewL(const TRect& aRect, CResourceAppUi* aAppUi);
+	
+	~CResourceView();
+	
+	void SetCurrentObjects(TObjectsViewed aViewed)
+		{iObjectsViewed = aViewed;};
+
+	void UpdateView();
+
+private:
+	// Private constructor to force NewL
+	CResourceView();
+	void ConstructL(const TRect& aRect, CResourceAppUi* aAppUi);
+	void InvalidateView(void) const;
+	void UpdateTitle(void);
+protected:
+
+	// Inherited from CCoeControl
+	virtual TInt CountComponentControls() const;				
+	virtual CCoeControl* ComponentControl(TInt aIndex) const;
+	virtual void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+
+private:
+	
+	// Inherited from CCoeControl
+	void Draw(const TRect& /*aRect*/) const;
+
+private:
+
+	CResourceAppUi* iAppUi;
+
+	// State Data
+	TBuf<27> iTitle; // Title above table
+	// Controls
+	CEikCommandButton* iCommandButton;	
+    };
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/inc/ResourceHandler.hrh	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,207 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "ResourceHandlerPlatform.hrh"
+
+#ifdef UIQ
+#define A_NUMBER_EDITOR QIK_NUMBER_EDITOR
+#define EXIKCTNUMBEREDITOR EQikCtNumberEditor
+#define CXIKNUMBEREDITOR CQikNumberEditor
+#define NUMBERVALUE Value
+#define SETNUMBERVALUEL SetValueL
+#define CXIKOPTIONBUTTONLIST CQikVertOptionButtonList
+#define EXIKCTOPTIONBUTLIST EQikCtVertOptionButtonList
+#define OPBUTLIST QIK_VERTOPBUT
+#define ITEMFLAG_USEFULLWIDTH itemflags=EQikDlgItemUseFullWidth;
+#define ITEMFLAG_DENSELYPACKED itemflags=EQikDlgItemDenselyPacked;
+#define ITEMFLAG_NONFOCUSING itemflags = EEikDlgItemNonFocusing;
+#endif
+
+#ifdef TV
+#define A_NUMBER_EDITOR NUMBER_EDITOR
+#define EXIKCTNUMBEREDITOR EEikCtNumberEditor
+#define CXIKNUMBEREDITOR CEikNumberEditor
+#define NUMBERVALUE Number
+#define SETNUMBERVALUEL SetNumber
+#define CXIKOPTIONBUTTONLIST CEikHorOptionButtonList
+#define EXIKCTOPTIONBUTLIST EEikCtHorOptionButList
+#define OPBUTLIST HOROPBUT
+#define LABELITEMFLAGS 
+#define ITEMFLAG_USEFULLWIDTH
+#define ITEMFLAG_DENSELYPACKED
+#define ITEMFLAG_NONFOCUSING
+#endif
+
+#define CXKNAPPLICATION CEikApplication
+#define CXKNDOCUMENT CEikDocument
+#define CXKNAPPUI CEikAppUi
+
+
+
+enum TResourceMenuCommands
+	{
+	EResourceMenu1Item0 = 200,
+	EResourceMenu1Item1,
+	EResourceMenu1Item2,
+	EResourceMenu1Item3,
+	EResourceMenu1Item4,
+	EResourceMenu1Item5,
+	EResourceMenu1Item6,
+	EResourceMenu1Item7,
+	EResourceMenu1Item8,
+	EResourceMenu1Item9,
+	EResourceMenu2Item0 = 300,
+	EResourceMenu2Item1,
+	EResourceMenu2Item2,
+	EResourceMenu3Item0 = 400,
+	EResourceMenu3Item1,
+	EResourceMenu3Item2,
+	EResourceMenu3Item3,
+	EResourceMenu3Item4
+	};
+
+enum TResourceDialogControls
+	{
+	EThreadNumberCtl = 1000,
+	EThreadSystemCtl,
+	EThreadProtectedCtl,
+	EThreadPageGeneral,
+	EThreadPagePriority,
+	EThreadPageOther,
+	EThreadPriorityPrompt,
+	EThreadPriorityButtonCtl,
+	EThreadPriorityText,
+	EThreadSetButtonCtl,
+	EThreadGetButtonCtl,
+	EThreadKillButtonCtl,
+	EThreadLabelTop,
+	EThreadLabelThreadName,//UIQ
+	EThreadLabelProcessName,//UIQ
+	EThreadLabelThreadAndProcessName,//TV
+
+	EProcessNumberCtl = 1100,
+	EProcessPriorityText,
+	EProcessSystemCtl,
+	EProcessProtectedCtl,
+	EProcessPageGeneral,
+	EProcessPagePriority,
+	EProcessPageOther,
+	EProcessPriorityButtonCtl,
+	EProcessGetButtonCtl,
+	EProcessKillButtonCtl,
+	EProcessSetButtonCtl,
+	EProcessLabelTop,
+	EProcessLabelProcessName,
+
+	EDebugSetButtonCtl,
+	EDebugPortCtl = 1200,
+
+	EDebugFileServerCtl,
+	EDebugFATCtl,
+	EDebugLoaderCtl,
+
+	EDebugPagePort,
+	EDebugPageKernel,
+	EDebugPageFiles,
+
+	EDebugFileLabel,
+	EDebugPortLabel,
+	EDebugKernelLabel,
+
+	EDebugKernelKHARDWARE,
+	EDebugKernelKBOOT,
+	EDebugKernelKSERVER,
+	EDebugKernelKMMU,
+	EDebugKernelKSEMAPHORE,
+	EDebugKernelKSCHED,
+	EDebugKernelKPROC,
+	EDebugKernelKEXEC,
+	EDebugKernelKEXECFAST,
+	EDebugKernelKTHREAD,
+	EDebugKernelKDLL,
+	EDebugKernelKLOGON,
+	EDebugKernelKPBUS1,
+	EDebugKernelKPBUS2,
+	EDebugKernelKPBUSDRV,
+	EDebugKernelKPOWER,
+	EDebugKernelKTIMING,
+	EDebugKernelKEVENT,
+	EDebugKernelKMEMTRACE,
+	EDebugKernelKIPC,
+	EDebugKernelKDEBUGGER,
+	EDebugKernelKVIDEO,
+	EDebugKernelKUSB,
+	EDebugKernelKPANIC,
+	
+	ERamLabel1,
+	ERamLabel2,
+	ERamTotal,
+	ERamFree,
+	ERamToLeaveButtonCtl,
+	ERamSetButtonCtl,
+	ERamUndoFillButtonCtl,
+
+	EDriveLabel1,
+	EDriveFormatButtonCtl,
+	EDriveUndoFillButtonCtl,
+	EDriveFillButtonCtl,
+	EDriveChoiceList,
+	EDriveToLeaveButtonCtl,
+
+	EDriveLeave4K,
+	EDriveLeave8K,
+	EDriveLeave16K,
+	EDriveLeave64K,
+	EDriveLeave256K
+	};
+
+enum TThreadPriorities
+	{
+	EThreadPm30_Null,
+	EThreadPm20_MuchLess,
+	EThreadPm10_Less,
+	EThreadP0_Normal,
+	EThreadP10_More,
+	EThreadP20_MuchMore,
+	EThreadP30_RealTime,
+	EThreadP100_AbsoluteVeryLow,
+	EThreadP200_AbsoluteLow,
+	EThreadP300_AbsoluteBackground,
+	EThreadP400_AbsoluteForeground,
+	EThreadP500_AbsoluteHigh,
+	EThreadP_NotStandard
+	};
+
+enum TProcessPriorities
+	{
+	EProcessP150_PriorityLow,
+	EProcessP250_PriorityBackground,
+	EProcessP350_PriorityForeground,
+	EProcessP450_PriorityHigh,
+	EProcessP650_PriorityWindowServer,
+	EProcessP750_PriorityFileServer,
+	EProcessP850_PriorityRealTimeServer,
+	EProcessP950_PrioritySupervisor,
+	EProcessPriorityNotStandard
+	};
+
+enum TRAMToLeave
+	{
+	ERamLeave4K,
+	ERamLeave8K,
+	ERamLeave16K,
+	ERamLeave64K,
+	ERamLeave256K
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/inc/ResourceHandler_DataStructs.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,112 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 __ResourceHandler_DataStructs_H
+#define __ResourceHandler_DataStructs_H
+
+
+#include <e32std.h> //descriptors, TUidType etc
+
+struct TListData
+/** Stores library, server, device and logical channel data */
+{
+	TFullName iName;
+};
+
+struct TProcessData
+/** Stores process details */
+	{
+	TBuf<8> iIdString;
+	TFullName iProcessName; // this is a TBuf (big)
+	TBuf<8> iPriorityString;
+	TBuf<1> iProtectedIndicator;
+	TBuf<1> iSystemIndicator;
+	TBuf<8> iOwnerIdString;
+	TBuf<15> iExitTypeString;
+	TBuf<8> iExitReasonString;
+	TExitCategoryName iExitCategoryName; // this is a TBuf
+	TBuf<KMaxUidName> iUidType0String;	//Note: buffer could be shorter as UID is converted to hexadecimal format
+	TBuf<KMaxUidName> iUidType1String;
+	TBuf<KMaxUidName> iUidType2String;
+	TFileName iFileName; // this is a TBuf
+	};
+
+struct TThreadData
+/** Stores thread details */
+	{
+	TBuf<8> iIdString;
+	TFullName iThreadName; // this is a TBuf (big)
+	TBuf<10> iPriorityString;
+	TBuf<8> iOwnerIdString;
+	TBuf<8> iStackSizeString;
+	TBuf<8> iHeapSizeString;
+	TBuf<1> iProtectedIndicator;
+	TBuf<1> iSystemIndicator;
+	TBuf<15> iExitTypeString;
+	TBuf<8> iExitReasonString;
+	TExitCategoryName iExitCategoryName; // this is a TBuf
+	};
+
+
+
+struct TChunkData
+/** Stores chunk details */
+	{
+	TFullName iChunkName; // this is a TBuf (big)
+	TBuf<8> iSizeString;
+	TBuf<8> iMaxSizeString;
+	TBuf<1> iReadableIndicator;
+	TBuf<1> iWritableIndicator;
+	};
+
+struct TSemaphoreData
+/** Stores semaphore details */
+	{
+	TFullName iSemaphoreName; // this is a TBuf (big)
+	TBuf<8> iHexCountString;
+	TBuf<8> iDecCountString;
+	};
+
+struct TMutexData
+/** Stores mutex details */
+	{
+	TFullName iMutexName; // this is a TBuf (big)
+	TBuf<8> iHexCountString;
+	TBuf<8> iDecCountString;
+	};
+
+struct TDriveData
+/** Stores drive details */
+	{
+	TFullName iDriveName; // this is a TBuf (big)
+	TFullName iVolumeName; // this is a TBuf (big) //volume mounted on drive
+	TBuf<2> iDriveNumberString;
+	TBuf<20> iMediaString; //Media mounted on drive
+	TBuf<12> iAttributesString;
+	TBuf<12> iSpaceString;
+	TBuf<12> iFreeSpaceString;
+	};
+
+struct THalData
+/**Stores HAL attributes data*/
+{
+	TBuf<4> iNumberString; //sequential number for each item
+	TBuf<30> iName;
+	TBuf<1> iDynamicIndicator;
+	TBuf<12> iDecValString; //Decimal attribute value - not sure of purpose of this
+	TBuf<12> iHexValString; //Hex attribute value - not sure of purpose of this
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/inc/ResourceHandler_Dialogs.h	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,118 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 RESOURCEHANDLER_DIALOGS_H
+#define RESOURCEHANDLER_DIALOGS_H
+
+#include <techview/eikdialg.h>
+
+class CDialogBase : public CEikDialog
+	{
+public:
+	// constructor
+	CDialogBase();
+public:
+	void DisplayError(TDesC& aMessage, TInt aErrorNumber);
+	void DisplayError(TDesC& aMessage);
+	};
+
+class CThreadNumberDialog : public CDialogBase
+	{
+public:
+	// constructor
+	CThreadNumberDialog();
+private:
+	void PreLayoutDynInitL();
+	void PostLayoutDynInitL();
+	TBool OkToExitL(TInt aKeycode);
+	void SetThread();
+	void UpdateDialogData(void);
+	void UpdateDialogDataReal(void);
+	void UpdateDialogDataAll(void);
+	void UpdatePriorityText(void); //updates the priority number value to correspond to the priority option selected
+	void HandleControlStateChangeL(TInt aControlId);
+
+private:
+	TThreadId iThreadID;
+	};
+
+class CProcessNumberDialog : public CDialogBase
+	{
+public:
+	// constructor
+	CProcessNumberDialog();
+private:
+	void PreLayoutDynInitL();
+	void PostLayoutDynInitL();
+	TBool OkToExitL(TInt aKeycode);
+	void UpdateDialogData(void);
+	void UpdatePriorityText(void);
+	void UpdateProcessId(void);
+	void SetProcess();
+	void HandleControlStateChangeL(TInt aControlId);
+
+private:
+	TProcessId iProcessID;
+	};
+
+class CDebugDialog : public CDialogBase
+	{
+public:
+	// constructor
+	CDebugDialog();
+private:
+	void PreLayoutDynInitL();
+	void GetKernelOptions();
+	void GetPortNumber();
+	TBool OkToExitL(TInt aKeycode);
+	void SetDebugOptions();
+private:
+	TInt iCurrentDebugPort;
+	};
+
+class CRamDialog : public CDialogBase
+	{
+public:
+	// constructor
+	CRamDialog();
+
+private:
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aKeycode);
+	void FillRam();
+	void UndoFillRam();
+	void UpdateDialogData();
+	
+private:
+	RChunk chunks[10000];
+	TUint noChunks;
+	};
+
+class CDriveDialog : public CDialogBase
+	{
+public:
+	// constructor
+	CDriveDialog();
+	~CDriveDialog();
+	void UpdateDialogLeaveSpace();
+private:
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aKeycode);
+private:
+	CDesCArrayFlat* iDriveName;
+	CArrayFixFlat<TInt>* iDriveLetter;
+	};
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/rsc/ResourceHandler.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,899 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 RES
+
+#include "ResourceHandler.hrh"
+
+#include <techview/eikon.rh>
+
+#include <uiklafgt/eikcore.rsg>
+// for symbolic definition of buttons
+#include <techview/eikon.rsg> //for runtime
+// for various constants
+#include <techview/eikon.hrh> //for runtime
+
+#ifdef UIQ
+// for QIK_NUMBER_EDITOR/QIK_VERTOPBUT/EQikDlgItemUseFullWidth
+#include <qikon.rh>
+// for various constants
+#include <qikon.hrh> //for runtime
+#endif
+
+#ifdef TV
+// for CEikNumberEditor
+#include <techview/techviewctl.rh>
+#include <techview/techview.hrh>
+#endif
+
+RESOURCE RSS_SIGNATURE { } 
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	menubar=r_resource_menubar;
+	}
+
+//
+// Menus
+//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+                            
+RESOURCE MENU_BAR r_resource_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_resource_menu_1; txt="Kernel"; },
+		MENU_TITLE { menu_pane=r_resource_menu_2; txt="System"; },
+		MENU_TITLE { menu_pane=r_resource_menu_3; txt="Tools"; }
+	};
+    }
+
+RESOURCE MENU_PANE r_resource_menu_1
+    {
+	items=
+	{
+		MENU_ITEM { command=EResourceMenu1Item0; txt="Process"; },
+		MENU_ITEM { command=EResourceMenu1Item1; txt="Thread"; },
+		MENU_ITEM { command=EResourceMenu1Item2; txt="Chunk"; },
+		MENU_ITEM { command=EResourceMenu1Item3; txt="Library"; },
+		MENU_ITEM { command=EResourceMenu1Item4; txt="Server"; },
+		MENU_ITEM { command=EResourceMenu1Item5; txt="Semaphore"; },
+		MENU_ITEM { command=EResourceMenu1Item6; txt="Mutex"; },
+		MENU_ITEM { command=EResourceMenu1Item7; txt="Log Device"; },
+		MENU_ITEM { command=EResourceMenu1Item8; txt="Phy Device"; },
+		MENU_ITEM { command=EResourceMenu1Item9; txt="Log Chan"; }
+
+        };
+    }
+
+RESOURCE MENU_PANE r_resource_menu_2
+    {
+	items=
+		{
+		MENU_ITEM { command=EResourceMenu2Item0; txt="Window Grp"; },
+		MENU_ITEM { command=EResourceMenu2Item1; txt="Drive"; },
+		MENU_ITEM { command=EResourceMenu2Item2; txt="HAL"; }
+        };
+    }
+
+RESOURCE MENU_PANE r_resource_menu_3
+	{
+	items=
+		{
+		MENU_ITEM { command=EResourceMenu3Item1; txt="Thread Tool"; },
+		MENU_ITEM { command=EResourceMenu3Item2; txt="Process Tool"; },
+		MENU_ITEM { command=EResourceMenu3Item3; txt="RAM Tool"; },
+		MENU_ITEM { command=EResourceMenu3Item4; txt="Drive Tool"; }
+        };
+    }
+
+//
+// Debug dialog
+//
+
+RESOURCE DIALOG r_debug_dialog
+	{
+	title = "Debug Tool";
+	flags = EEikDialogFlagWait;
+	buttons = r_debug_dialog_buttons;
+	pages = r_debug_dialog_pages;
+
+	}
+
+RESOURCE DLG_BUTTONS r_debug_dialog_buttons
+	{
+	buttons=
+		{
+		DLG_BUTTON
+			{
+			id=EDebugSetButtonCtl;
+			button=CMBUT { txt="Set";};
+			hotkey = 'S';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidCancel;
+			button=CMBUT { txt="Cancel";};
+			hotkey = 'C';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidOk;
+			button=CMBUT { txt="Done";};
+			hotkey = 'D';
+			}
+		};
+	}
+
+RESOURCE ARRAY r_debug_dialog_pages
+	{
+	items =
+		{
+		PAGE 
+			{
+     		text = "Port"; 
+			id = EDebugPagePort;
+			lines = r_debug_dialog_page_port;
+			},
+		PAGE
+			{
+			text = "Kernel"; 
+			id = EDebugPageKernel;
+			lines = r_debug_dialog_page_kernel;
+			},
+		PAGE
+			{
+			text = "FS"; 
+			id = EDebugPageFiles;
+			lines = r_debug_dialog_page_file_s;
+			}
+		};
+	}
+
+
+RESOURCE ARRAY r_debug_dialog_page_kernel
+	{
+	items =
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH
+			id = EDebugKernelLabel;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Select debugging information to be printed.\nNote: must have debug version of ekern.exe in ROM.\nNote: not all combinations may be possible.";
+				}; 
+			},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KHARDWARE"; id = EDebugKernelKHARDWARE;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KBOOT"; id = EDebugKernelKBOOT;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KSERVER"; id = EDebugKernelKSERVER;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KMMU"; id = EDebugKernelKMMU;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KSEMAPHORE"; id = EDebugKernelKSEMAPHORE;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KSCHED"; id = EDebugKernelKSCHED;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KPROC"; id = EDebugKernelKPROC;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KEXEC"; id = EDebugKernelKEXEC;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KEXECFAST"; id = EDebugKernelKEXECFAST;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KTHREAD"; id = EDebugKernelKTHREAD;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KDLL"; id = EDebugKernelKDLL;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KLOGON"; id = EDebugKernelKLOGON;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KPBUS1"; id = EDebugKernelKPBUS1;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KPBUS2"; id = EDebugKernelKPBUS2;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KPBUSDRV"; id = EDebugKernelKPBUSDRV;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KPOWER"; id = EDebugKernelKPOWER;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KTIMING"; id = EDebugKernelKTIMING;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KEVENT"; id = EDebugKernelKEVENT;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KMEMTRACE"; id = EDebugKernelKMEMTRACE;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KIPC"; id = EDebugKernelKIPC;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KDEBUGGER"; id = EDebugKernelKDEBUGGER;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KVIDEO"; id = EDebugKernelKVIDEO;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KUSB"; id = EDebugKernelKUSB;},
+		DLG_LINE { type=EEikCtCheckBox; prompt="KPANIC"; id = EDebugKernelKPANIC;}
+		}; 
+	}
+
+
+RESOURCE ARRAY r_debug_dialog_page_file_s
+	{
+	items =
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH //needed?
+			id = EDebugFileLabel;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Select debugging information to be printed.\nMust have debug version of efile.exe in ROM. Or define\n_DEBUG_RELEASE in f32dbg.h. \nNote: these values are not readable.";
+				}; 
+			},
+		DLG_LINE 
+			{ 
+			type=EEikCtCheckBox;
+			prompt="File Server"; 
+			id = EDebugFileServerCtl;
+		    },
+		DLG_LINE 
+			{ 
+			type=EEikCtCheckBox;
+			prompt="FAT File System"; 
+			id = EDebugFATCtl;
+			},
+		DLG_LINE 
+			{ 
+			type=EEikCtCheckBox;
+			prompt="Loader"; 
+			id = EDebugLoaderCtl;
+			} 
+
+		}; 
+	
+	} 
+	
+
+RESOURCE ARRAY r_debug_dialog_page_port
+	{
+	items =
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH
+			id = EDebugPortLabel;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Set the port number for debug output. (-1 means no port is set).";
+				}; 
+			},
+		DLG_LINE
+			{
+			type = EXIKCTNUMBEREDITOR;
+			prompt = "Debug Port ";
+			id = EDebugPortCtl;
+			control = A_NUMBER_EDITOR 
+				{ 
+				min = -1; 
+				max = 1023; 
+				};
+			//itemflags = EEikDlgItemNoBorder | EEikDlgItemNonFocusing;
+			ITEMFLAG_NONFOCUSING
+			}
+		}; 
+	}
+
+
+//
+// Thread Dialog
+//
+
+RESOURCE DIALOG r_thread_dialog
+	{
+	title = "Thread Tool";
+	buttons = r_thread_dialog_buttons;
+	flags = EEikDialogFlagWait;
+	pages = r_thread_dialog_pages;
+	}
+
+
+RESOURCE DLG_BUTTONS r_thread_dialog_buttons
+	{
+	buttons=
+		{		
+		DLG_BUTTON
+			{
+			id=EThreadKillButtonCtl;
+			button=CMBUT { txt="Kill!";};
+			hotkey = 'K';
+			},
+		DLG_BUTTON
+			{
+			id=EThreadSetButtonCtl;
+			button=CMBUT { txt="Set";};
+			hotkey = 'S';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidCancel;
+			button=CMBUT { txt="Cancel";};
+			hotkey = 'C';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidOk;
+			button=CMBUT { txt="Done";};
+			hotkey = 'D';
+			}
+		};
+	}
+
+RESOURCE ARRAY r_thread_dialog_pages
+	{
+	items =
+		{
+		PAGE 
+			{
+     		text = "Thread"; 
+			id = EThreadPageGeneral;
+			lines = r_thread_dialog_page_general;
+			//buttons=r_thread_dialog_buttonbar;
+			},
+		PAGE
+			{
+			text = "Priority"; 
+			id = EThreadPagePriority;
+			lines = r_thread_dialog_page_priority;
+			},
+		PAGE
+			{
+			text = "Other"; 
+			id = EThreadPageOther;
+			lines = r_thread_dialog_page_other;
+			}
+		};
+	}
+
+RESOURCE ARRAY r_thread_dialog_page_general
+	{
+	items = 
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH
+			id = EThreadLabelTop;
+			control = LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Enter thread id number and hit 'Get Thread' to find and change \nthread attributes. (Zero for all threads)";
+				}; 
+			},
+		DLG_LINE
+			{
+			type = EXIKCTNUMBEREDITOR;
+			prompt = "Thread Number";
+			id = EThreadNumberCtl;
+			control = A_NUMBER_EDITOR 
+				{ 
+				min = 0; 
+				max = 1023; 
+				};
+			//itemflags = EEikDlgItemNoBorder | EEikDlgItemNonFocusing;
+			ITEMFLAG_NONFOCUSING
+			},
+//The process and thread name are defined on one line in TV and 2 lines in UIQ, due to restricted dialog space in TV.
+#ifdef TV
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			prompt = "Thread/Process:";
+			id = EThreadLabelThreadAndProcessName;
+			control = LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="";
+				}; 
+			},
+#endif
+#ifdef UIQ
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			prompt = "Process:";
+			ITEMFLAG_DENSELYPACKED//ITEMFLAG_USEFULLWIDTH
+			id = EThreadLabelProcessName;
+			control = LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="";
+				}; 
+			},
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			prompt = "Thread:";
+			ITEMFLAG_DENSELYPACKED//ITEMFLAG_USEFULLWIDTH
+			id = EThreadLabelThreadName;
+			control = LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="";
+				}; 
+			},
+#endif
+		DLG_LINE
+			{
+			type=EEikCtCommandButton;
+			ITEMFLAG_USEFULLWIDTH
+			id = EThreadGetButtonCtl;
+			control = CMBUT
+				{
+				txt="GET Thread";
+				}; 
+			},
+		DLG_LINE //create space between buttons
+			{
+			type=EEikCtLabel;
+			id = EThreadLabelThreadName;
+			control = LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="         ";
+				}; 
+			}
+		};
+	}
+
+RESOURCE ARRAY r_thread_dialog_page_priority
+	{
+	items = 
+		{
+			DLG_LINE
+				{
+				type=EEikCtLabel;
+				ITEMFLAG_USEFULLWIDTH
+				id = EThreadPriorityPrompt;
+				control = LABEL
+					{
+					horiz_align=EEikLabelAlignHLeft;
+					txt="";
+					}; 
+				},
+			DLG_LINE 
+				{ 
+				prompt="Priority"; 
+				type=EEikCtChoiceList; 
+				id=EThreadPriorityButtonCtl;
+				control=CHOICELIST
+					{ 
+					array_id=r_thread_priority_buttons; 
+					};
+				},
+			DLG_LINE
+				{
+				type=EEikCtLabel;
+				ITEMFLAG_USEFULLWIDTH
+				id = EThreadPriorityText;
+				control = LABEL
+					{
+					horiz_align=EEikLabelAlignHLeft;
+					txt="";
+					}; 
+				}
+		};
+	}
+	
+	
+RESOURCE ARRAY r_thread_dialog_page_other
+	{
+	items = 
+		{
+		DLG_LINE 
+			{ 
+			type=EEikCtCheckBox;
+			prompt="System"; 
+			id = EThreadSystemCtl;
+			},
+		DLG_LINE 
+			{ 
+			type=EEikCtCheckBox;
+			prompt="Protected"; 
+			id = EThreadProtectedCtl;
+			}
+		};
+	}
+	
+
+
+RESOURCE ARRAY r_thread_priority_buttons
+	{
+	items= 
+        	{ 
+			LBUF { txt="PriorityNull=-30";},				//	EThreadPm30_Null
+			LBUF { txt="PriorityMuchLess=-20";},			//	EThreadPm20_MuchLess	
+			LBUF { txt="PriorityLess=-10";},				//	EThreadPm10_Less	
+			LBUF { txt="PriorityNormal=0";},				//	EThreadP0_Normal
+        		LBUF { txt="PriorityMore=10"; },				//	EThreadP10_More
+        		LBUF { txt="PriorityMuchMore=20"; },			//	EThreadP20_MuchMore
+       	 		LBUF { txt="PriorityRealTime=30"; },			//	EThreadP30_RealTime
+			LBUF { txt="PriorityAbsoluteVeryLow=100";},	//	EThreadP100_AbsoluteVeryLow
+			LBUF { txt="PriorityAbsoluteLow=200";},		//	EThreadP200_AbsoluteLow
+			LBUF { txt="PriorityAbsoluteBackground=300";},	//	EThreadP300_AbsoluteBackground
+			LBUF { txt="PriorityAbsoluteForeground=400";},	//	EThreadP400_AbsoluteForeground
+			LBUF { txt="PriorityAbsoluteHigh=500";},		//	EThreadP500_AbsoluteHigh
+			LBUF { txt = "Not Standard";}				//	EThreadP_NotStandard
+        	};
+	}
+//
+// Process Dialog
+//
+
+RESOURCE DIALOG r_process_number_dialog
+	{
+	title = "Process Tool";
+	buttons = r_process_dialog_buttons;
+	flags = EEikDialogFlagWait;
+	pages = r_process_dialog_pages;
+	}
+
+RESOURCE DLG_BUTTONS r_process_dialog_buttons
+	{
+	buttons=
+		{
+		DLG_BUTTON
+			{
+			id=EProcessKillButtonCtl;
+			button=CMBUT { txt="Kill";};
+			hotkey = 'K';
+			},
+		DLG_BUTTON
+			{
+			id=EProcessSetButtonCtl;
+			button=CMBUT { txt="Set";};
+			hotkey = 'S';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidCancel;
+			button=CMBUT { txt="Cancel";};
+			hotkey = 'C';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidOk;
+			button=CMBUT { txt="Done";};
+			hotkey = 'D';
+			}
+		};
+	}
+
+RESOURCE ARRAY r_process_dialog_pages
+	{
+	items =
+		{
+		PAGE 
+			{
+     		text = "Process"; 
+			id = EProcessPageGeneral;
+			lines = r_process_dialog_page_general;
+			},
+		PAGE
+			{
+			text = "Priority"; 
+			id = EProcessPagePriority;
+			lines = r_process_dialog_page_priority;
+			},
+		PAGE
+			{
+			text = "Other"; 
+			id = EProcessPageOther;
+			lines = r_process_dialog_page_other;
+			}
+		};
+	}
+
+	
+RESOURCE ARRAY r_process_dialog_page_general
+	{
+	items = 
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH//itemflags=EEikDlgItemCtlSharesWidth;?
+			id = EProcessLabelTop;
+			control = LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Enter process id number and hit 'Get Process' to find and \nchange process attributes";
+				}; 
+			},
+		DLG_LINE
+			{
+			type = EXIKCTNUMBEREDITOR;
+			prompt = "Process Number";
+			id = EProcessNumberCtl;
+			control = A_NUMBER_EDITOR
+				{ 
+				min = 0; 
+				max = 1023; 
+				};
+			//itemflags = EEikDlgItemNoBorder | EEikDlgItemNonFocusing;
+			ITEMFLAG_NONFOCUSING
+			},
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_DENSELYPACKED
+			prompt = "Process: ";
+			id = EProcessLabelProcessName;
+			control = LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="";
+				}; 
+			},
+		DLG_LINE
+			{
+			type=EEikCtCommandButton;
+			ITEMFLAG_USEFULLWIDTH
+			id = EProcessGetButtonCtl;
+			control = CMBUT
+				{
+				txt="Get Process";
+				}; 
+			}
+		};
+	}
+
+RESOURCE ARRAY r_process_dialog_page_priority
+	{
+	items =
+		{
+			DLG_LINE 
+				{ 
+				prompt="Priority"; 
+				type=EEikCtChoiceList; 
+				id=EProcessPriorityButtonCtl;
+				control=CHOICELIST
+					{ 
+					array_id=r_process_priority_buttons; 
+					};
+				},
+			DLG_LINE
+				{
+				type=EEikCtLabel;
+				ITEMFLAG_USEFULLWIDTH
+				//prompt = "Priority";
+				id = EProcessPriorityText;
+				control = LABEL
+					{
+					horiz_align=EEikLabelAlignHLeft;
+					txt="";
+					}; 
+				}
+		};
+	}
+	
+RESOURCE ARRAY r_process_dialog_page_other
+	{
+	items = 
+		{
+		DLG_LINE 
+			{ 
+			type=EEikCtCheckBox;
+			prompt="System"; 
+			id = EProcessSystemCtl;
+			},
+		DLG_LINE 
+			{ 
+			type=EEikCtCheckBox;
+			prompt="Protected"; 
+			id = EProcessProtectedCtl;
+			}
+		};
+	}
+
+RESOURCE ARRAY r_process_priority_buttons
+	{
+	items= 
+        { 
+        	LBUF { txt="EPriorityLow=150"; },			//	EProcessP150_PriorityLow
+        	LBUF { txt="EPriorityBackground=250"; },	//	EProcessP250_PriorityBackground
+        	LBUF { txt="EPriorityForeground=350"; },	//	EProcessP350_PriorityForeground
+		LBUF { txt="EPriorityHigh=450";},			//	EProcessP450_PriorityHigh
+		LBUF { txt="EPriorityWindowServer=650";},	//	EProcessP650_PriorityWindowServer
+		LBUF { txt="EPriorityFileServer=750";},		//	EProcessP750_PriorityFileServer
+		LBUF { txt="EPriorityRealTimeServer=850";},	//	EProcessP850_PriorityRealTimeServer	
+		LBUF { txt="EPrioritySupervisor=950";},		//	EProcessP950_PrioritySupervisor
+       	 	LBUF { txt ="PriorityNotStandard"; }	//	EProcessPriorityNotStandard
+             };
+	}
+//
+// Ram Dialog
+//
+
+RESOURCE DIALOG r_ram_dialog
+	{
+	title = "RAM Tool";
+	buttons = r_ram_dialog_buttons;
+	flags = EEikDialogFlagWait;
+		items =
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH
+			id = ERamLabel1;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Fill the RAM by tapping OK. This will use RAM up to the amount specified";
+				}; 
+			},
+		DLG_LINE 
+			{ 
+			prompt="Leave RAM"; 
+			type=EXIKCTOPTIONBUTLIST; 
+			id=ERamToLeaveButtonCtl;
+			control=OPBUTLIST
+					{ 
+					array_id=r_ram_to_leave_buttons; 
+					};
+				},
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH
+			id = ERamTotal;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Total";
+				}; 
+			},
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH
+			id = ERamFree;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Free";
+				}; 
+			},
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH
+			id = ERamLabel2;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="To relinquish RAM kill this thread with the thread tool";
+				}; 
+			}
+		};
+	}
+
+RESOURCE DLG_BUTTONS r_ram_dialog_buttons
+	{
+	buttons=
+		{
+		DLG_BUTTON
+			{
+			id=ERamSetButtonCtl;
+			button=CMBUT { txt="Fill";};
+			hotkey = 'F';
+			},
+		DLG_BUTTON
+			{
+			id=ERamUndoFillButtonCtl;
+			button=CMBUT { txt="Undo Fill(s)";};
+			hotkey = 'U';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidCancel;
+			button=CMBUT { txt="Close";};
+			hotkey = 'C';
+			}
+		};
+	}
+
+RESOURCE ARRAY r_ram_to_leave_buttons
+	{
+	items= 
+       	{ 
+       	OPBUT { id = ERamLeave4K; text="<4K"; },
+       	OPBUT { id = ERamLeave8K; text="<8K"; },
+       	OPBUT { id = ERamLeave16K; text="<16K"; },
+		OPBUT { id = ERamLeave64K; text="<64K"; },
+		OPBUT { id = ERamLeave256K; text="<256K"; }
+       	};
+	}
+
+//
+// Drive Dialog
+//
+
+RESOURCE DIALOG r_drive_dialog
+	{
+	title = "Drive Tool";
+	buttons = r_drive_dialog_buttons;
+	flags = EEikDialogFlagWait;
+		items =
+		{
+		DLG_LINE
+			{
+			type=EEikCtLabel;
+			ITEMFLAG_USEFULLWIDTH //EEikDlgItemCtlGetsWidthFirst
+			id = ERamLabel1;
+			control=LABEL
+				{
+				horiz_align=EEikLabelAlignHLeft;
+				txt="Pick a drive. Fill the drive by tapping Fill. This will use space up to the \namount specified. This can be undone by tapping Undo Fill";
+				}; 
+
+			},
+		DLG_LINE 
+			{ 
+			prompt="Drive"; 
+			type=EEikCtChoiceList; 
+			id=EDriveChoiceList;
+			control=CHOICELIST
+				{
+			
+				};
+			},
+		DLG_LINE 
+			{ 
+			prompt="Leave space"; 
+			type=EXIKCTOPTIONBUTLIST;//EQikCtVertOptionButtonList; 
+			id=EDriveToLeaveButtonCtl;
+			control=OPBUTLIST
+					{ 
+					array_id=r_drive_to_leave_buttons; 
+					};
+			}
+		};
+	}
+
+RESOURCE DLG_BUTTONS r_drive_dialog_buttons
+	{
+	buttons=
+		{
+		DLG_BUTTON
+			{
+			id=EDriveFormatButtonCtl;
+			button=CMBUT { txt="Format";};
+			hotkey = 'T';
+			},
+		DLG_BUTTON
+			{
+			id=EDriveFillButtonCtl;
+			button=CMBUT { txt="Fill";};
+			hotkey = 'F';
+			},
+		DLG_BUTTON
+			{
+			id=EDriveUndoFillButtonCtl;
+			button=CMBUT { txt="Undo Fill(s)";};
+			hotkey = 'U';
+			},
+		DLG_BUTTON
+			{
+			id=EEikBidCancel;
+			button=CMBUT { txt="Close";};
+			hotkey = 'C';
+			}
+		};
+	}
+
+RESOURCE ARRAY r_drive_to_leave_buttons
+	{
+	items= 
+        	{ 
+        	OPBUT { id = EDriveLeave4K; text="<4K"; },
+        	OPBUT { id = EDriveLeave8K; text="<8K"; },
+			OPBUT { id = EDriveLeave16K; text="<16K"; },
+			OPBUT { id = EDriveLeave64K; text="<64K"; },
+        	OPBUT { id = EDriveLeave256K; text="<256K"; }
+         	};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/rsc/ResourceHandler_loc.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,42 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ResourceHandler_loc.rss -- ResourceHandler localised resource file
+// System Headers
+// 
+//
+
+#include <appinfo.rh>
+
+/********************************************************************************
+ *
+ * Local Headers
+ *
+ *******************************************************************************/
+
+/********************************************************************************
+ *
+ * Resources
+ *
+ *******************************************************************************/
+RESOURCE LOCALISABLE_APP_INFO
+	{
+	short_caption = "ResHan";
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO 
+			{
+			caption =			"ResourceHandler";
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/rsc/ResourceHandler_reg.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,43 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ResourceHandler_reg.rss -- ResourceHandler application registration file
+// System Headers
+// 
+//
+
+#include <appinfo.rh>
+
+/********************************************************************************
+ *
+ * Local Headers
+ *
+ *******************************************************************************/
+
+/********************************************************************************
+ *
+ * Resources
+ *
+ *******************************************************************************/
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0x101FD147
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file					= "ResourceHandler";
+	localisable_resource_file	= "\\resource\\apps\\ResourceHandler_loc";
+	hidden						= KAppNotHidden;
+	embeddability				= KAppNotEmbeddable;
+	newfile						= KAppDoesNotSupportNewFile;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/rsc/ResourceHandleraif.rss	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,38 @@
+// 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ResourceHandler -- Application Information Resource file
+// System Includes
+// 
+//
+
+#include <aiftool.rh>
+
+/********************************************************************************
+ * 
+ * Application Information
+ *
+ *******************************************************************************/
+RESOURCE AIF_DATA
+{
+	app_uid = 0x101FD147;
+
+	caption_list=
+	{ 
+		CAPTION { code = ELangEnglish; caption = "ResourceHandler"; }
+	};
+
+	embeddability = KAppNotEmbeddable;
+	hidden = KAppNotHidden ;
+	newfile = KAppDoesNotSupportNewFile;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_AppUi.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,184 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "ResourceHandler.h"
+
+void CResourceAppUi::ConstructL()
+    {
+	BaseConstructL();
+	iListBoxView = CResourceView::NewL(ClientRect(), this);
+	//construct a default view
+	HandleCommandL(EResourceMenu1Item0);
+	}
+
+CResourceAppUi::~CResourceAppUi()
+	{
+	delete iListBoxView;
+	}
+
+void CResourceAppUi::HandleCommandL(TInt aCommand)
+	{
+	// Increase this threads priority for a proper snapshot
+	RThread thisThread;
+	thisThread.SetPriority(EPriorityAbsoluteHigh);
+	thisThread.Close();
+
+	TObjectsViewed aObjectViewed = EObjectNone;
+
+	switch (aCommand)
+		{
+
+	// Menu 1
+
+	case EResourceMenu1Item0:
+		aObjectViewed = EObjectProcess;
+		break;
+
+	case EResourceMenu1Item1:	
+		aObjectViewed = EObjectThread;
+		break;
+	
+	case EResourceMenu1Item2:	
+		aObjectViewed = EObjectChunk;
+		break;
+               
+	case EResourceMenu1Item3:
+		aObjectViewed = EObjectLibrary;
+		break;
+
+	case EResourceMenu1Item4:
+		aObjectViewed = EObjectServer;
+		break;
+
+	case EResourceMenu1Item5:
+		aObjectViewed = EObjectSemaphore;
+		break;
+
+	case EResourceMenu1Item6:
+		aObjectViewed = EObjectMutex;
+		break;
+
+	case EResourceMenu1Item7:
+		aObjectViewed = EObjectLogicalDevice;
+		break;
+
+	case EResourceMenu1Item8:
+		aObjectViewed = EObjectPhysicalDevice;
+		break;
+
+	case EResourceMenu1Item9:
+		aObjectViewed = EObjectLogicalChannel;
+		break;
+
+	// Menu 2
+
+	case EResourceMenu2Item0:
+		aObjectViewed = EObjectWindow;
+		break;
+	
+	case EResourceMenu2Item1:
+		aObjectViewed = EObjectDrive;
+		break;
+
+	case EResourceMenu2Item2:
+		aObjectViewed = EObjectHal;
+		break;
+		
+	// Menu 3
+	case EResourceMenu3Item0:
+		SetDebug();
+		break;
+	case EResourceMenu3Item1:
+		SetThread();
+		break;
+	case EResourceMenu3Item2:
+		SetProcess();
+		break;
+	case EResourceMenu3Item3:
+		SetRam();
+		break;
+	case EResourceMenu3Item4:
+		SetDrive();
+		break;
+	case EEikCmdExit: // necessary for uninstalling
+		Exit();
+		break;
+	default:
+		break;
+		}
+
+	// Set view data
+	if (aObjectViewed != EObjectNone)
+		{
+		iListBoxView->SetCurrentObjects(aObjectViewed);
+		iListBoxView->UpdateView();
+		}
+
+	// ResetPriority
+	RThread thisThread2;
+	thisThread2.SetPriority(EPriorityNormal);
+	thisThread2.Close();
+
+	}
+
+void CResourceAppUi::SetProcess()
+	{
+	CProcessNumberDialog* dialog = new(ELeave) CProcessNumberDialog();
+
+	dialog->ExecuteLD(R_PROCESS_NUMBER_DIALOG);
+	
+	}
+
+void CResourceAppUi::SetThread()
+	{
+	CThreadNumberDialog* dialog = new(ELeave) CThreadNumberDialog();
+
+	dialog->ExecuteLD(R_THREAD_DIALOG);
+		
+	}
+
+void CResourceAppUi::SetDebug()
+	{
+	CDebugDialog* dialog = new(ELeave) CDebugDialog();
+
+	dialog->ExecuteLD(R_DEBUG_DIALOG);
+		
+	}
+
+void CResourceAppUi::SetRam()
+	{
+	CRamDialog* dialog = new(ELeave) CRamDialog();
+
+	dialog->ExecuteLD(R_RAM_DIALOG);
+		
+	}
+
+void CResourceAppUi::SetDrive()
+	{
+	CDriveDialog* dialog = new(ELeave) CDriveDialog();
+
+	dialog->ExecuteLD(R_DRIVE_DIALOG);
+		
+	}
+
+void CResourceAppUi::AppendDesc(TDes& root, TDes& add)
+	{
+	add.Trim();
+	root.Append(add);
+	root.Append(_L(",  ")); 
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_Application.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,29 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "ResourceHandler.h"
+ 
+
+TUid CResourceApplication::AppDllUid() const
+	{
+	TUid KUidResourceHandler = { 0x101FD147 };
+	return KUidResourceHandler;
+	}
+
+CApaDocument* CResourceApplication::CreateDocumentL()
+	{
+	return new (ELeave) CResourceDocument(*this);
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_Dialogs.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1325 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 <e32svr.h>
+#include "ResourceHandler.h"
+
+//
+// Thread Dialog
+//
+
+CThreadNumberDialog::CThreadNumberDialog()
+	{
+	}
+
+void CThreadNumberDialog::PreLayoutDynInitL()
+	{	
+	// to start use the thread ID of this thread
+	iThreadID = RThread().Id();
+	UpdateDialogData();
+	}
+
+void CThreadNumberDialog::PostLayoutDynInitL()
+	{	
+
+	}
+
+void CThreadNumberDialog::UpdateDialogData()
+	{
+	if (iThreadID > 0) UpdateDialogDataReal(); // Real thread
+	else UpdateDialogDataAll(); // 0 for all unprotected threads 
+	}
+
+void CThreadNumberDialog::UpdateDialogDataAll()
+//update dialog - set for all threads
+	{
+	// match controls and set values
+	CXIKNUMBEREDITOR *thisNumberEditor;
+	thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EThreadNumberCtl));
+	thisNumberEditor->SETNUMBERVALUEL(0);
+
+	CEikCheckBox *sysCheckBox, *protCheckBox;
+	sysCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadSystemCtl));
+	protCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadProtectedCtl));
+
+	CEikCommandButton *killBut, *okBut, *setBut;
+	killBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadKillButtonCtl));
+	okBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EEikBidOk));
+	setBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadSetButtonCtl));
+	CEikLabel *priorityDialogPrompt, *priorityNumberLabel;
+	priorityNumberLabel = STATIC_CAST(CEikLabel*, Control(EThreadPriorityText));
+	priorityDialogPrompt = STATIC_CAST(CEikLabel*, Control(EThreadPriorityPrompt));
+	
+	priorityDialogPrompt->SetTextL(_L("Cannot set priority for all threads."));
+	
+#ifdef UIQ
+	CEikLabel *theThreadLabel, *theProcessLabel;
+	theThreadLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadName));
+	theProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelProcessName));
+	theProcessLabel->SetTextL(_L("Various"));
+	theThreadLabel->SetTextL(_L("All unprotected"));
+#endif
+#ifdef TV
+	CEikLabel *threadAndProcessLabel;
+	threadAndProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadAndProcessName));
+	threadAndProcessLabel->SetTextL(_L("All threads/processes"));
+#endif
+	CEikChoiceList *prioritySelector;
+	prioritySelector = STATIC_CAST(CEikChoiceList*, Control(EThreadPriorityButtonCtl));
+
+
+	// Change the dimming on the component controls as appropriate for all threads
+	protCheckBox->SetDimmed(ETrue);
+	sysCheckBox->SetDimmed(EFalse);
+
+	prioritySelector->MakeVisible(EFalse);
+
+	priorityNumberLabel->MakeVisible(EFalse);
+
+	killBut->SetDimmed(ETrue);
+	okBut->SetDimmed(EFalse);
+	setBut->SetDimmed(EFalse);
+	DrawNow();
+
+	}
+
+//updates dialog depending on iThreadID
+void CThreadNumberDialog::UpdateDialogDataReal()
+	{
+	// match controls
+	CXIKNUMBEREDITOR *thisNumberEditor;
+	thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EThreadNumberCtl));
+	thisNumberEditor->SETNUMBERVALUEL(0);
+
+	CEikCheckBox *sysCheckBox, *protCheckBox;
+	sysCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadSystemCtl));
+	protCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadProtectedCtl));
+
+	CEikCommandButton *killBut, *okBut, *setBut;
+	okBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EEikBidOk));
+	setBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadSetButtonCtl));
+	killBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadKillButtonCtl));
+		
+#ifdef UIQ
+	CEikLabel *theThreadLabel, *theProcessLabel;
+	theThreadLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadName));
+	theProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelProcessName));
+#endif
+#ifdef TV
+	CEikLabel *threadAndProcessLabel;
+	threadAndProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadAndProcessName));
+#endif	
+
+	CEikChoiceList *priorityOpButs;
+	priorityOpButs = STATIC_CAST(CEikChoiceList*, Control(EThreadPriorityButtonCtl));
+
+	//
+	//Update dialog info with thread details
+	//
+
+	RThread thread;
+	TInt err = KErrNone;
+	
+	err = thread.Open(iThreadID);
+		
+	if (err!=KErrNone)
+		{ 
+		thread.Close();
+		TBuf<70> errorMessage(_L("Cannot get thread number "));
+		errorMessage.AppendNum(iThreadID);
+		errorMessage.Append(_L(". Thread::Open()"));
+		DisplayError(errorMessage, err);
+		thread.Open(RThread().Id()); // Get this thread
+		}
+
+	thisNumberEditor->SETNUMBERVALUEL(thread.Id());
+
+#ifdef UIQ
+	theThreadLabel->SetTextL(thread.Name()); 
+#endif
+#ifdef TV
+	TBuf<150> lProcessAndThread(thread.Name());
+#endif
+
+	RProcess process;
+	thread.Process(process);
+#ifdef UIQ
+	theProcessLabel->SetTextL(process.Name());
+#endif
+#ifdef TV
+	lProcessAndThread.Append(_L("/"));
+	lProcessAndThread.Append(process.Name());
+	threadAndProcessLabel->SetTextL(lProcessAndThread); 
+#endif
+	process.Close();
+	
+	CEikLabel *priorityDialogPrompt, *priorityNumberLabel;
+	
+	priorityDialogPrompt = STATIC_CAST(CEikLabel*, Control(EThreadPriorityPrompt));	
+	if ( iThreadID == RThread().Id()) priorityDialogPrompt->SetTextL(_L("The priority of the current thread cannot be reset from within this application."));
+	else priorityDialogPrompt->SetTextL(_L("Set the priority."));
+	
+	priorityNumberLabel = STATIC_CAST(CEikLabel*, Control(EThreadPriorityText));
+	TBuf<30> priorityText(_L("Priority Value:  "));
+	TBuf<4> priorityNumber;
+	
+	priorityNumber.Format(KFormatDec,thread.Priority());
+	priorityText.Append(priorityNumber);
+	priorityNumberLabel->SetTextL(priorityText);
+
+	TThreadPriority lThreadPriority = thread.Priority();
+	TInt lThreadPrioritySetting;
+	switch (lThreadPriority)
+	{
+		case(EPriorityAbsoluteHigh): lThreadPrioritySetting = EThreadP500_AbsoluteHigh; break;
+		case(EPriorityAbsoluteForeground): lThreadPrioritySetting = EThreadP400_AbsoluteForeground; break;
+		case(EPriorityAbsoluteBackground): lThreadPrioritySetting = EThreadP300_AbsoluteBackground; break;
+		case(EPriorityAbsoluteLow): lThreadPrioritySetting = EThreadP200_AbsoluteLow; break;
+		case(EPriorityAbsoluteVeryLow): lThreadPrioritySetting = EThreadP100_AbsoluteVeryLow; break;
+		case(EPriorityRealTime): lThreadPrioritySetting = EThreadP30_RealTime; break;
+		case(EPriorityMuchMore): lThreadPrioritySetting = EThreadP20_MuchMore; break;
+		case(EPriorityMore): lThreadPrioritySetting = EThreadP10_More; break;
+		case(EPriorityNormal): lThreadPrioritySetting = EThreadP0_Normal; break;
+		case(EPriorityLess): lThreadPrioritySetting = EThreadPm10_Less; break;
+		case(EPriorityMuchLess): lThreadPrioritySetting = EThreadPm20_MuchLess; break;
+		case(EPriorityNull): lThreadPrioritySetting = EThreadPm30_Null; break;
+		default: lThreadPrioritySetting = EThreadP_NotStandard; break;
+	}
+
+	priorityOpButs->SetCurrentItem(lThreadPrioritySetting);
+
+	sysCheckBox->SetState(CEikButtonBase::EIndeterminate);
+	protCheckBox->SetState(CEikButtonBase::EIndeterminate);
+
+	// Change the dimming on the component controls depending on the thread
+	sysCheckBox->SetDimmed(EFalse);
+
+	if ( iThreadID == RThread().Id()) priorityOpButs->SetDimmed(ETrue);
+	else priorityOpButs->SetDimmed(EFalse);
+
+	killBut->SetDimmed(EFalse);
+	okBut->SetDimmed(EFalse);
+	setBut->SetDimmed(EFalse);
+	
+	if (iThreadID == RThread().Id())
+		{
+		// can change the protection on this thread
+		protCheckBox->SetDimmed(EFalse);
+		}
+	else
+		{
+		// cannot change protection
+		protCheckBox->SetDimmed(ETrue);
+		if (true)	// If we are in secure then we ensure that the
+					// user can not change anything.
+			{
+			// cannot change anything
+			sysCheckBox->SetDimmed(ETrue);
+			priorityOpButs->SetDimmed(ETrue);
+			killBut->SetDimmed(ETrue);
+			okBut->SetDimmed(ETrue);
+			setBut->SetDimmed(ETrue);
+			}
+
+		}
+
+	thread.Close();
+	DrawNow();
+
+	}
+
+void CThreadNumberDialog::UpdatePriorityText()
+//updates the priority number value to correspond to the priority option selected
+	{	
+
+	}
+
+void CThreadNumberDialog::HandleControlStateChangeL(TInt aControlId)
+	{
+	if (aControlId == EThreadGetButtonCtl)
+		{
+		CXIKNUMBEREDITOR *thisNumberEditor; 
+		thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EThreadNumberCtl));
+		iThreadID = (TThreadId)thisNumberEditor->NUMBERVALUE();
+		// re-evaluate everything
+		UpdateDialogData(); 
+
+		// re-draw
+		PageChangedL(EThreadPageGeneral); 
+		PageChangedL(EThreadPagePriority);
+		PageChangedL(EThreadPageOther);
+		DrawNow();
+		}
+	}
+
+void CThreadNumberDialog::SetThread()
+	{
+	//change thread parameters
+		if (iThreadID > 0)
+			{
+			// only get here if thread is not protected		
+
+
+			RThread thread;
+			TInt err = thread.Open(iThreadID);
+
+			if (err == KErrNone)
+				{
+				// This is the current thread
+				if ( iThreadID == RThread().Id())
+					{
+					}
+				
+					
+
+				CEikChoiceList *opButs;
+				opButs = STATIC_CAST(CEikChoiceList*, Control(EThreadPriorityButtonCtl));
+
+				TThreadPriority threadPrioritySet = EPriorityNull;
+				TInt currentItem = opButs->CurrentItem();
+				
+				switch (currentItem) 
+					{
+					case (EThreadP500_AbsoluteHigh): threadPrioritySet=EPriorityAbsoluteHigh; break;
+					case (EThreadP400_AbsoluteForeground): threadPrioritySet=EPriorityAbsoluteForeground; break;
+					case (EThreadP300_AbsoluteBackground): threadPrioritySet=EPriorityAbsoluteBackground; break;
+					case (EThreadP200_AbsoluteLow): threadPrioritySet=EPriorityAbsoluteLow; break;
+					case (EThreadP100_AbsoluteVeryLow): threadPrioritySet=EPriorityAbsoluteVeryLow; break;
+					case (EThreadP30_RealTime): threadPrioritySet=EPriorityRealTime; break;
+					case (EThreadP20_MuchMore): threadPrioritySet=EPriorityMuchMore; break;
+					case (EThreadP10_More): threadPrioritySet=EPriorityMore; break;
+					case (EThreadP0_Normal): threadPrioritySet=EPriorityNormal; break;
+					case (EThreadPm10_Less): threadPrioritySet=EPriorityLess; break;
+					case (EThreadPm20_MuchLess): threadPrioritySet=EPriorityMuchLess; break;
+					case (EThreadPm30_Null): threadPrioritySet=EPriorityNull; 
+					iEikonEnv->InfoWinL(_L("Error"), _L("Cannot change thread priority to Null"));
+					break;
+					default: iEikonEnv->InfoWinL(_L("Error"), _L("Invalid priority: cannot change thread priority to Not Standard"));	
+						
+					};
+
+				if (threadPrioritySet != EPriorityNull) 
+				{
+					thread.SetPriority(threadPrioritySet);
+						
+					TThreadPriority threadPriorityGot = thread.Priority();
+					if (threadPrioritySet!=threadPriorityGot)
+						{		
+						iEikonEnv->InfoWinL(_L("Error"), _L("Thread priority not set: RThread::SetPriority() unsuccessful!"));	
+						}
+					thread.Close();
+					}
+				}
+			}
+		else //all threads selected - only changes system setting
+			{
+
+			TName prefix(KAsterisk);
+			TFindThread findHb;
+			findHb.Find(prefix);
+			TFullName name; // this is a TBuf
+			RThread thread;
+
+			while (findHb.Next(name)==KErrNone)
+				{
+				TInt err = thread.Open(name);
+				if (err != KErrNone)
+					{	
+					TBuf<70> errorMessage(_L("Cannot get thread "));
+					errorMessage.Append(name);
+					errorMessage.Append(_L(". RThread::Open()"));
+					DisplayError(errorMessage, err);
+					}	
+					
+				if (err == KErrNone)
+					{
+
+
+					thread.Close();
+					}
+				}
+			}	
+	}
+
+TBool CThreadNumberDialog::OkToExitL(TInt aButtonId)
+	{
+	if (aButtonId == EEikBidCancel) 
+		{
+		return ETrue;
+		}
+	else if (aButtonId == EThreadSetButtonCtl)
+		{
+		SetThread();
+		UpdateDialogData();
+		iEikonEnv->InfoMsg(_L("Attribute(s) set as displayed"));
+		return EFalse;
+		}
+	else if (aButtonId == EEikBidOk)
+		{
+		SetThread();
+		return ETrue;
+	}
+	else if (aButtonId == EThreadKillButtonCtl)
+		{
+		RThread thread;
+		TInt err = thread.Open(iThreadID);
+		if (err == KErrNone)
+			{
+			thread.Kill(KErrNone);
+			iEikonEnv->InfoMsg(_L("Thread Killed"));
+			}
+		else iEikonEnv->InfoWinL(_L("Error"), _L("Attempt to open thread for modification unsuccessful."));
+		thread.Close();
+		return EFalse;
+		}
+	return ETrue;
+	}
+
+//
+//
+// Process Dialog
+//
+//
+
+CProcessNumberDialog::CProcessNumberDialog()
+	{
+	}
+
+void CProcessNumberDialog::PreLayoutDynInitL()
+	{	
+	// to start use the thread ID of this Process
+	iProcessID = RProcess().Id();
+	UpdateDialogData();
+	}
+
+void CProcessNumberDialog::PostLayoutDynInitL()
+	{	
+	}
+
+void CProcessNumberDialog::UpdateDialogData()
+//Updates GUI data
+	{
+	// match the controls
+	CXIKNUMBEREDITOR *thisNumberEditor;
+	thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EProcessNumberCtl));
+	CEikLabel *priorityTextLabel;
+	priorityTextLabel = STATIC_CAST(CEikLabel*, Control(EProcessPriorityText));
+
+	CEikCheckBox *sysCheckBox, *protCheckBox;
+	sysCheckBox = STATIC_CAST(CEikCheckBox*,Control(EProcessSystemCtl));
+	protCheckBox = STATIC_CAST(CEikCheckBox*,Control(EProcessProtectedCtl));
+
+	CEikCommandButton *killBut, *okBut, *setBut;
+	killBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EProcessKillButtonCtl));
+	okBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EEikBidOk));
+	setBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EProcessSetButtonCtl));
+
+	CEikLabel *theProcessLabel;
+	theProcessLabel = STATIC_CAST(CEikLabel*, Control(EProcessLabelProcessName));
+
+	CEikChoiceList *opButs;
+	opButs = STATIC_CAST(CEikChoiceList*, Control(EProcessPriorityButtonCtl));
+
+	//open a process and update GUI data
+	RProcess process;
+	TInt err = KErrNone;
+	
+	err = process.Open(iProcessID); // Opens a handle to a process
+	
+	if (err!=KErrNone)
+		{ 
+		TBuf<70> errorMessage(_L("Cannot get process number "));
+		errorMessage.AppendNum(iProcessID);
+		errorMessage.Append(_L(". System error number "));
+		errorMessage.AppendNum(err);
+
+		iEikonEnv->InfoWinL(_L("Error"), errorMessage);
+		iProcessID = RProcess().Id();
+		process.Open(iProcessID); // Opens a handle to this Process
+		}
+
+	thisNumberEditor->SETNUMBERVALUEL(process.Id());
+	theProcessLabel->SetTextL(process.Name());
+	
+	TBuf<30> priorityText(_L("Priority Value:  "));
+	TBuf<10> priorityNumber;
+	priorityNumber.Format(KFormatDec,process.Priority());
+	priorityText.Append(priorityNumber);
+	priorityTextLabel->SetTextL(priorityText);
+	if (process.Priority()==EPriorityLow) opButs->SetCurrentItem(EProcessP150_PriorityLow);
+	else if (process.Priority()==EPriorityBackground) opButs->SetCurrentItem(EProcessP250_PriorityBackground);
+	else if (process.Priority()==EPriorityForeground) opButs->SetCurrentItem(EProcessP350_PriorityForeground);
+	else if (process.Priority()==EPriorityHigh) opButs->SetCurrentItem(EProcessP450_PriorityHigh);
+	else if (process.Priority()==EPriorityWindowServer) opButs->SetCurrentItem(EProcessP650_PriorityWindowServer);
+	else if (process.Priority()==EPriorityFileServer) opButs->SetCurrentItem(EProcessP750_PriorityFileServer);
+	else if (process.Priority()==EPriorityRealTimeServer) opButs->SetCurrentItem(EProcessP850_PriorityRealTimeServer);
+	else if (process.Priority()==EPrioritySupervisor) opButs->SetCurrentItem(EProcessP950_PrioritySupervisor);
+	else (opButs->SetCurrentItem(EProcessPriorityNotStandard));
+	
+
+	sysCheckBox->SetState(CEikButtonBase::EIndeterminate);
+	protCheckBox->SetState(CEikButtonBase::EIndeterminate);
+ 
+
+	// Change the dimming on the component controls depending on the Process
+	sysCheckBox->SetDimmed(EFalse);
+	opButs->SetDimmed(EFalse);
+	#ifdef WINS
+	opButs->SetDimmed(ETrue);
+	#endif
+
+	killBut->SetDimmed(EFalse);
+	okBut->SetDimmed(EFalse);
+	setBut->SetDimmed(EFalse);
+	if (iProcessID == RProcess().Id())
+		{
+		// can change the protection on this Process
+		protCheckBox->SetDimmed(EFalse);
+		}
+	else
+		{
+		// cannot change protection
+		protCheckBox->SetDimmed(ETrue);
+		if (true)	// If we are in secure then we ensure that the
+					// user can not change anything.
+			{
+			// cannot change anything
+			sysCheckBox->SetDimmed(ETrue);
+			opButs->SetDimmed(ETrue);
+			killBut->SetDimmed(ETrue);
+			okBut->SetDimmed(ETrue);
+			setBut->SetDimmed(ETrue);
+			}
+		}
+	process.Close(); // Closes the handle
+	DrawNow();
+
+	}
+
+void CProcessNumberDialog::SetProcess()
+{
+		// only get here if Process is not protected		
+
+
+		RProcess process;
+		TInt err = process.Open(iProcessID);
+
+		if (err == KErrNone)
+			{
+			// This is the current Process
+			if ( iProcessID == RProcess().Id())
+				{
+				}
+			
+				
+			
+			CEikChoiceList *opButs;
+			TProcessPriority processPrioritySelected = EPriorityLow;
+
+			opButs = STATIC_CAST(CEikChoiceList*, Control(EProcessPriorityButtonCtl));
+
+			TInt currentItem = opButs->CurrentItem();
+			TBool validPrioritySelected = ETrue;
+				
+			switch (currentItem) 
+				{
+				case (EProcessP150_PriorityLow): processPrioritySelected=EPriorityLow; break;
+				case (EProcessP250_PriorityBackground): processPrioritySelected=EPriorityBackground; break;
+				case (EProcessP350_PriorityForeground): processPrioritySelected=EPriorityForeground; break;
+				case (EProcessP450_PriorityHigh): processPrioritySelected=EPriorityHigh; break;
+				case (EProcessP650_PriorityWindowServer): 
+				case (EProcessP750_PriorityFileServer): 
+				case (EProcessP850_PriorityRealTimeServer): 
+				case (EProcessP950_PrioritySupervisor): 
+				default: iEikonEnv->InfoWinL(_L("Error"), _L("This is an internal priority and cannot be explicitly set"));
+						 validPrioritySelected = EFalse;
+						 break;
+				}
+			if (validPrioritySelected == 1) process.SetPriority(processPrioritySelected);
+		
+		}
+		process.Close();
+	}
+
+void CProcessNumberDialog::HandleControlStateChangeL(TInt aControlId)
+	{
+	if (aControlId == EProcessGetButtonCtl)
+		{
+		CXIKNUMBEREDITOR *thisNumberEditor; 
+		thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EProcessNumberCtl));
+		iProcessID = (TProcessId)thisNumberEditor->NUMBERVALUE();
+		// re-evaluate everything
+		UpdateDialogData(); 
+
+		// re-draw
+		PageChangedL(EProcessPageGeneral); 
+		PageChangedL(EProcessPagePriority);
+		PageChangedL(EProcessPageOther);
+		DrawNow();
+		}
+	}
+
+TBool CProcessNumberDialog::OkToExitL(TInt aButtonId)
+	{
+	if (aButtonId == EEikBidCancel) // do nothing
+		{
+		return ETrue;
+		}
+	else if (aButtonId == EProcessSetButtonCtl)
+		{
+		SetProcess();
+		UpdateDialogData();
+		iEikonEnv->InfoMsg(_L("Attribute(s) set as displayed"));
+		return EFalse;
+		}
+	else if (aButtonId == EProcessKillButtonCtl) 
+		{
+		RProcess Process;
+		TInt err = Process.Open(iProcessID);
+		if (err == KErrNone)
+			{
+			iEikonEnv->InfoMsg(_L("Killing Process"));
+			Process.Kill(KErrNone);
+			}
+		Process.Close();
+		iEikonEnv->InfoMsg(_L("Process killed"));
+		return EFalse;
+		}
+
+	else if (aButtonId == EEikBidOk)
+		{
+		SetProcess();
+		return ETrue;
+		}
+	else return ETrue;
+	}
+
+
+//
+//
+// Debug Dialog
+//
+//
+
+CDebugDialog::CDebugDialog()
+	{
+	}
+
+void CDebugDialog::PreLayoutDynInitL()
+	{
+	GetPortNumber();
+	GetKernelOptions();
+	}
+
+void CDebugDialog::GetPortNumber()
+	{
+	//map the control
+	CXIKNUMBEREDITOR *thisNumberEditor;
+	thisNumberEditor = static_cast<CXIKNUMBEREDITOR*>(Control(EDebugPortCtl));
+	//set control value
+	TInt debugPort, err;
+	err = HAL::Get(HAL::EDebugPort, debugPort);
+	if (err == KErrNone)
+			{
+			thisNumberEditor->SETNUMBERVALUEL(debugPort);
+			iCurrentDebugPort = debugPort;
+			}
+		else
+			{
+			thisNumberEditor->SETNUMBERVALUEL(-1);
+			iCurrentDebugPort = -1;
+			}
+
+	}
+
+void CDebugDialog::GetKernelOptions()
+	{
+	// Kernel debug mask
+
+	TUint32 debugMask = UserSvr::DebugMask();
+	//map the controls (check boxes) and set the control values
+	
+	CEikCheckBox *aCheckBox;
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKHARDWARE));
+	aCheckBox->SetState(debugMask & KHARDWARE ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKBOOT));
+	aCheckBox->SetState(debugMask & KBOOT ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSERVER));
+	aCheckBox->SetState(debugMask & KSERVER ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMMU));
+	aCheckBox->SetState(debugMask & KMMU ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSEMAPHORE));
+	aCheckBox->SetState(debugMask & KSEMAPHORE ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSCHED));
+	aCheckBox->SetState(debugMask & KSCHED ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPROC));
+	aCheckBox->SetState(debugMask & KPROC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXEC));
+	aCheckBox->SetState(debugMask & KEXEC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXECFAST));
+	aCheckBox->SetState(debugMask & KEXECFAST ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTHREAD));
+	aCheckBox->SetState(debugMask & KTHREAD ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDLL));
+	aCheckBox->SetState(debugMask & KDLL ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKLOGON));
+	aCheckBox->SetState(debugMask & KLOGON ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS1));
+	aCheckBox->SetState(debugMask & KPBUS1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS2));
+	aCheckBox->SetState(debugMask & KPBUS2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUSDRV));
+	aCheckBox->SetState(debugMask & KPBUSDRV ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPOWER));
+	aCheckBox->SetState(debugMask & KPOWER ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTIMING));
+	aCheckBox->SetState(debugMask & KTIMING ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEVENT));
+	aCheckBox->SetState(debugMask & KEVENT ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMEMTRACE));
+	aCheckBox->SetState(debugMask & KMEMTRACE ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKIPC));
+	aCheckBox->SetState(debugMask & KIPC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDEBUGGER));
+	aCheckBox->SetState(debugMask & KDEBUGGER ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKVIDEO));
+	aCheckBox->SetState(debugMask & KVIDEO ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKUSB));
+	aCheckBox->SetState(debugMask & KUSB ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	
+	aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPANIC));
+	aCheckBox->SetState(debugMask & KPANIC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+	}
+
+void CDebugDialog::SetDebugOptions()
+	{	
+		TBuf<800> errorMssg; //to show where updates unsuccessful
+		//set new debug port
+		CXIKNUMBEREDITOR *thisNumberEditor;
+		thisNumberEditor = static_cast<CXIKNUMBEREDITOR*>(Control(EDebugPortCtl));
+		TInt newDebugPort = thisNumberEditor->NUMBERVALUE();
+
+		TInt err;
+		if (newDebugPort!=-1)
+			{
+				err = HAL::Set(HAL::EDebugPort, newDebugPort);
+				if (err==KErrNone) iCurrentDebugPort = newDebugPort;
+				else
+					{
+					TBuf<3> errorCode;
+					errorCode.Format(KFormatDec,err);
+					errorMssg.Append(_L("Cannot set port: System error "));
+					errorMssg.Append(errorCode);
+					errorMssg.Append('\n');
+					thisNumberEditor->SETNUMBERVALUEL(iCurrentDebugPort);
+					}
+			}
+		//set new Kernel debug values
+		CEikCheckBox *aCheckBox;
+		TUint32 debugMask = 0;	
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKHARDWARE));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KHARDWARE;
+
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKBOOT));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KBOOT;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSERVER));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KSERVER;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMMU));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KMMU;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSEMAPHORE));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KSEMAPHORE;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSCHED));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KSCHED;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPROC));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPROC;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXEC));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KEXEC;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXECFAST));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KEXECFAST;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTHREAD));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KTHREAD;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDLL));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KDLL;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKLOGON));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KLOGON;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS1));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPBUS1;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS2));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPBUS2;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUSDRV));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPBUSDRV;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPOWER));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPOWER;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTIMING));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KTIMING;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEVENT));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KEVENT;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMEMTRACE));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KMEMTRACE;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKIPC));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KIPC;
+		
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDEBUGGER));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KDEBUGGER;
+
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKVIDEO));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KVIDEO;
+
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKUSB));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KUSB;
+
+		aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPANIC));
+		if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPANIC;
+
+		User::SetDebugMask(debugMask);
+		TUint32 updatedDebugMask = UserSvr::DebugMask();
+		if (debugMask != updatedDebugMask)
+			{
+			errorMssg.Append(_L("Unable to set kernel options selected. Note that KPanic must be selected if any other options are selected. View the \nupdated dialog to see which Kernel options are set"));
+			GetKernelOptions();
+			}
+
+
+		CEikCheckBox *thisCheckBox, *thisCheckBox2, *thisCheckBox3;
+		thisCheckBox = static_cast<CEikCheckBox*>(Control(EDebugFileServerCtl));
+		thisCheckBox2 = static_cast<CEikCheckBox*>(Control(EDebugFATCtl));
+		thisCheckBox3 = static_cast<CEikCheckBox*>(Control(EDebugLoaderCtl));
+
+		TInt fsDebugMask = 0;
+		if (thisCheckBox->State()==CEikButtonBase::ESet) fsDebugMask|=KFSERV;
+		if (thisCheckBox2->State()==CEikButtonBase::ESet) fsDebugMask|=KFSYS;
+		if (thisCheckBox3->State()==CEikButtonBase::ESet) fsDebugMask|=KFLDR;
+
+		RFs aRFs;
+		err = aRFs.Connect();
+		if (err == KErrNone)
+			{
+			err = aRFs.SetDebugRegister(fsDebugMask);
+			if (err != KErrNone)
+				errorMssg.Append(_L("Unable to set FS options: RFs::SetDebugRegister() fails with  System error number "));
+			TBuf<3> errorCode;
+			errorCode.Format(KFormatDec, err);
+			errorMssg.Append(errorCode);
+			}
+		else
+			{
+			errorMssg.Append(_L("\nRFs::Connect() fails with System error number "));
+			TBuf<3> errorCode;
+			errorCode.Format(KFormatDec, err);
+			errorMssg.Append(errorCode);
+			thisCheckBox->SetState(CEikButtonBase::EClear);
+			thisCheckBox2->SetState(CEikButtonBase::EClear);
+			thisCheckBox3->SetState(CEikButtonBase::EClear);
+			}
+		aRFs.Close();
+
+		if (errorMssg.Length() != 0)
+			{
+			_LIT(KDialogTitle, "Error");
+			iEikonEnv->InfoWinL(KDialogTitle, errorMssg);
+			}
+	}
+
+TBool CDebugDialog::OkToExitL(TInt aButtonId)
+	{
+	if (aButtonId == EDebugSetButtonCtl)
+		{
+		SetDebugOptions();
+		DrawNow();
+		return EFalse;
+		}
+	if (aButtonId == EEikBidOk)
+		{
+		SetDebugOptions();
+		}
+	else if (aButtonId == EEikBidCancel)
+		{
+		// Do Nothing
+		}
+	return ETrue;
+	}
+
+//
+//
+// Ram Dialog
+//
+//
+
+CRamDialog::CRamDialog()
+	{
+	noChunks = 0;
+	}
+
+void CRamDialog::PreLayoutDynInitL()
+	{
+	UpdateDialogData();
+	}
+
+void CRamDialog::UpdateDialogData()
+	{
+	CEikLabel *theTotalLabel, *theFreeLabel;
+	theTotalLabel = STATIC_CAST(CEikLabel*, Control(ERamTotal));
+	theFreeLabel = STATIC_CAST(CEikLabel*, Control(ERamFree));
+
+	TMemoryInfoV1Buf memorybuf;
+	UserHal::MemoryInfo(memorybuf);
+	TInt total=memorybuf().iTotalRamInBytes;
+	TInt free=memorybuf().iFreeRamInBytes;
+
+	TBuf<40> totalTxt;
+	totalTxt.Format(_L("Total RAM (bytes) %d"),total);
+	TBuf<40> freeTxt;
+	freeTxt.Format(_L("Free RAM (bytes) %d"),free);
+
+	theTotalLabel->SetTextL(totalTxt);
+	theFreeLabel->SetTextL(freeTxt);
+
+	CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+	fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(ERamToLeaveButtonCtl));
+
+	// All buttons invisible
+	fillSpaceOpButs->ComponentControl(0)->MakeVisible(ETrue);
+	fillSpaceOpButs->ComponentControl(1)->MakeVisible(ETrue);
+	fillSpaceOpButs->ComponentControl(2)->MakeVisible(ETrue);
+	fillSpaceOpButs->ComponentControl(3)->MakeVisible(ETrue);
+	fillSpaceOpButs->ComponentControl(4)->MakeVisible(ETrue);
+
+	if (free<K4k) 
+		{
+		// All buttons visible
+		fillSpaceOpButs->ComponentControl(0)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(1)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(2)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+		}
+	else if (free>=K4k && free<K8k) 
+		{
+		fillSpaceOpButs->ComponentControl(1)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(2)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+		fillSpaceOpButs->SetButtonById(ERamLeave4K);
+		}
+	else if (free>=K8k && free<K16k) 
+		{
+		fillSpaceOpButs->ComponentControl(2)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+		fillSpaceOpButs->SetButtonById(ERamLeave8K);
+		}
+	else if (free>=K16k && free<K64k)
+		{
+		fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+		fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+		fillSpaceOpButs->SetButtonById(ERamLeave16K);
+		}
+	else if (free>= K64k && free<K256k)
+		{
+		fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+		fillSpaceOpButs->SetButtonById(ERamLeave64K);
+		}
+	else 
+		{
+		fillSpaceOpButs->SetButtonById(ERamLeave256K);
+		}
+	}
+
+void CRamDialog::UndoFillRam()
+	{	
+	if (noChunks == 0) iEikonEnv->InfoMsg(_L("Undo fill invalid"));
+	else
+	{
+		while (noChunks>0)
+			{
+			chunks[--noChunks].Close();
+			}
+	}
+}
+void CRamDialog::FillRam()
+	{
+		iEikonEnv->BusyMsgL(_L("Filling RAM"));
+
+		CXIKOPTIONBUTTONLIST *opButs;
+		opButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(ERamToLeaveButtonCtl));
+
+		TUint ramToLeave=K4k;
+		if (opButs->LabeledButtonId()==ERamLeave4K) ramToLeave=K4k;
+		else if (opButs->LabeledButtonId()==ERamLeave8K) ramToLeave=K8k;
+		else if (opButs->LabeledButtonId()==ERamLeave16K) ramToLeave=K16k;
+		else if (opButs->LabeledButtonId()==ERamLeave64K) ramToLeave=K64k;
+		else if (opButs->LabeledButtonId()==ERamLeave256K) ramToLeave=K256k; 
+
+
+		TUint chunkSize;
+		TInt err = KErrNone;
+		TBuf<20> aName;
+		TTime time;
+
+		TMemoryInfoV1Buf memorybuf;
+		UserHal::MemoryInfo(memorybuf);
+
+		// Fill the RAM up with various chunks
+		for (chunkSize = K8M; chunkSize>=ramToLeave; chunkSize>>=1) 
+			{
+			TUint KMaxChunks = 10000;
+			for (err=KErrNone; err==KErrNone && noChunks<KMaxChunks;)	
+				{
+				// create a unique chunk name
+				time.UniversalTime();
+				aName.Format(_L("%S%02d-%08x"),&KFillName, noChunks,*(reinterpret_cast<const TInt32*>(&(time.Int64()))));
+
+				err = chunks[noChunks].CreateGlobal(aName, chunkSize, chunkSize);
+				// ensure RAM is committed by filling it
+				if (err==KErrNone)
+					{
+					Mem::Fill(chunks[noChunks++].Base(),chunkSize,'A');
+					}
+				User::CompressAllHeaps();
+				} ;
+			}
+		iEikonEnv->BusyMsgCancel();
+		if (err == KErrNone) iEikonEnv->InfoMsg(_L("Fill Complete"));
+	}
+
+TBool CRamDialog::OkToExitL(TInt aButtonId)
+	{
+	if (aButtonId == EEikBidCancel)
+		{
+		return ETrue;
+		}
+	else if (aButtonId == ERamSetButtonCtl)
+		{
+		FillRam();
+		UpdateDialogData();
+		DrawNow();
+		return EFalse;
+		}
+	else if (aButtonId == ERamUndoFillButtonCtl)
+		{
+		UndoFillRam();
+		UpdateDialogData();
+		DrawNow();
+		return EFalse;
+		}
+	return ETrue;
+	}
+
+//
+//
+// Drive Dialog
+//
+//
+
+CDriveDialog::CDriveDialog() : iDriveName(NULL), iDriveLetter(NULL)
+	{
+	}
+
+CDriveDialog::~CDriveDialog()
+	{
+		delete iDriveLetter;
+		delete iDriveName;
+	}
+
+void CDriveDialog::PreLayoutDynInitL()
+	{
+	iDriveName = new (ELeave) CDesCArrayFlat(KMaxLocalDrives);
+	iDriveLetter = new  CArrayFixFlat<TInt>(KMaxLocalDrives);
+
+	TBuf<40> string; // displayed in choice box
+	RFs rfs;	
+	User::LeaveIfError(rfs.Connect());
+	TDriveInfo driveInfo;
+	TVolumeInfo volumeInfo;
+	TDriveUnit driveUnit(EDriveA);
+	TInt err1,err2,drive=0,number=0;
+
+	do {
+	
+		driveUnit = drive;
+		err1 = rfs.Volume(volumeInfo,driveUnit);
+		err2 = rfs.Drive(driveInfo, driveUnit);
+		if (err1==KErrNone && err2==KErrNone)
+			{
+
+			// Only interested if not ROM and local
+
+			if (volumeInfo.iDrive.iType != EMediaRom &&
+				(volumeInfo.iDrive.iDriveAtt | KDriveAttLocal))
+				{
+				number++;
+
+				string.Delete(0,string.MaxLength());
+
+				string=driveUnit.Name();
+
+				string.Append(_L(" "));
+				string.Append(volumeInfo.iName);
+
+				iDriveName->AppendL(string);
+				iDriveLetter->AppendL(drive);
+				}
+			}
+
+		drive++;
+
+		} while (drive <= EDriveZ && number < KMaxLocalDrives);
+
+	rfs.Close();
+
+	CEikChoiceList *driveChoice;
+	driveChoice = STATIC_CAST(CEikChoiceList*, Control(EDriveChoiceList));
+	driveChoice->SetArrayL(iDriveName);
+	driveChoice->SetArrayExternalOwnership(ETrue);
+
+	
+	CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+	fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(EDriveToLeaveButtonCtl));
+	fillSpaceOpButs->SetButtonById(EDriveLeave256K);
+	}
+
+
+void UpdateDialogLeaveSpace()
+	{	
+	}
+
+TBool CDriveDialog::OkToExitL(TInt aButtonId)
+	{
+	if (aButtonId == EEikBidCancel) 
+		{
+		delete iDriveName;
+		delete iDriveLetter;
+		return ETrue;
+		}
+	else
+		{
+		CEikChoiceList *driveChoice;
+		driveChoice = STATIC_CAST(CEikChoiceList*, Control(EDriveChoiceList));
+		TInt choice = driveChoice->CurrentItem();
+		TDriveUnit driveUnit;
+		driveUnit = (*iDriveLetter)[choice];
+
+		RFs aRfs;
+		User::LeaveIfError(aRfs.Connect());
+
+		CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+		fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(EDriveToLeaveButtonCtl));
+
+		if (aButtonId==EDriveFillButtonCtl)
+			{ 
+			iEikonEnv->BusyMsgL(_L("Filling Drive"));
+			// need a unique file name
+			TInt i=0,err = KErrNone;
+			TFileName fileName;
+			TTime time;
+
+			TInt fileSize;
+
+			CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+			fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(EDriveToLeaveButtonCtl));
+
+			TInt spaceToLeave=K4k;
+			if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave4K) spaceToLeave=K4k;
+			else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave8K) spaceToLeave=K8k;
+			else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave16K) spaceToLeave=K16k;
+			else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave64K) spaceToLeave=K64k;
+			else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave256K) spaceToLeave=K256k;
+
+			for (fileSize = K1M; fileSize>=spaceToLeave; fileSize>>=1)
+				{
+
+				do { 
+					time.UniversalTime();
+					TDriveName driveName = driveUnit.Name();
+					fileName.Format(_L("%S\\%S%06d-%08x"),&driveName,&KFillName,++i,*(reinterpret_cast<const TInt32*>(&(time.Int64()))));
+
+					// create a file of this file size
+					RFile file;
+					err=file.Create(aRfs, fileName, EFileRead|EFileWrite);
+					if (err!=KErrNone)
+						{	
+						TBuf<70> errorMessage(_L("Cannot complete fill. RFile::Create() failed with error no. "));
+						errorMessage.AppendNum(err);
+						iEikonEnv->InfoWinL(_L("Error"), errorMessage);
+						}
+							
+						// fill file up to fileSize
+					if (err==KErrNone)
+						{
+						const TInt MaxBufSize=512;
+						TBuf8<MaxBufSize> buf;
+						buf.SetLength(MaxBufSize);
+						Mem::Fill((void*)buf.Ptr(),MaxBufSize,0xef);
+						TInt rem=fileSize;
+						while(rem)
+							{
+							TInt s=Min(MaxBufSize,rem);
+							err=file.Write(buf,s);
+							if (err!=KErrNone) break;
+							rem-=s;
+							}	
+						}
+
+					file.Close();
+					if(err!=KErrNone) aRfs.Delete(fileName);
+					} while (err==KErrNone && i<100);
+				} 
+				iEikonEnv->BusyMsgCancel();
+				iEikonEnv->InfoMsg(_L("Drive filled"));
+			}
+		else if (aButtonId==EDriveUndoFillButtonCtl)
+			{
+			iEikonEnv->BusyMsgL(_L("Undo Drive Fill"));
+			TFindFile fileFinder(aRfs);
+			CDir* fileList;
+
+			TBuf<10> name;
+			name=KFillName;
+			name.Append(KAsterisk);
+
+			TBuf<3> driveName;
+			driveName=driveUnit.Name();
+			driveName.Append(_L("\\"));
+
+			TInt findErr = fileFinder.FindWildByPath(name,&driveName,fileList);
+			TInt deleteErr = KErrNone;
+
+			if (findErr == KErrNone)
+				{
+				for (TInt i=0;i<fileList->Count();++i)
+					{
+					TBuf<100> filePath(driveName);
+					filePath.Append((*fileList)[i].iName);
+
+					deleteErr = aRfs.Delete(filePath);
+					}
+				}
+			iEikonEnv->BusyMsgCancel();
+
+			if (deleteErr !=KErrNone)
+				{
+				TBufC<15> function(_L("RFs::Delete()"));
+				DisplayError(function, deleteErr);
+				}
+			if (findErr == KErrNone && deleteErr == KErrNone)
+			{
+				fillSpaceOpButs->ComponentControl(0)->MakeVisible(ETrue);
+				fillSpaceOpButs->ComponentControl(1)->MakeVisible(ETrue);
+				fillSpaceOpButs->ComponentControl(2)->MakeVisible(ETrue);
+				fillSpaceOpButs->ComponentControl(3)->MakeVisible(ETrue);
+				fillSpaceOpButs->ComponentControl(4)->MakeVisible(ETrue);
+				iEikonEnv->InfoMsg(_L("Undo Fill Complete"));
+			}
+
+			else iEikonEnv->InfoMsg(_L("Undo Fill Invalid"));
+			delete fileList;
+			}
+		else if (aButtonId==EDriveFormatButtonCtl)
+			{
+			TInt count;
+			RFormat format;
+			TInt err=format.Open(aRfs,driveUnit.Name(),EHighDensity,count);
+			if (err==KErrNone)
+				{
+				iEikonEnv->BusyMsgL(_L("Formatting Drive"));
+				while (count && err==KErrNone)
+					{
+					err = format.Next(count);
+					if (err != KErrNone)
+						{
+						TBufC<15> function(_L("RFormat::Next()"));
+						DisplayError(function, err);
+						}
+					}
+				iEikonEnv->BusyMsgCancel();
+				}
+			else
+				{						
+				TBuf<70> errorMessage(_L("RFormat::Open() failed with system error no."));
+				errorMessage.AppendNum(err);
+				iEikonEnv->InfoWinL(_L("Error"), errorMessage);
+				}
+			format.Close();
+			}
+
+		aRfs.Close();
+		}
+	return EFalse;
+	}
+
+CDialogBase::CDialogBase()
+	{
+	}
+
+void CDialogBase::DisplayError(TDesC& aMessage, TInt aErrorNumber)
+	{
+	//could check doesn't go out of bounds
+	TBuf<250> errorMssge(aMessage);
+	errorMssge.Append(_L(" fails with system error no. "));
+	TBuf<3> errorNum;
+	_LIT(KFormatDec, "%d");
+	errorNum.Format(KFormatDec, aErrorNumber);
+	errorMssge.Append(errorNum);
+	iEikonEnv->InfoWinL(_L("Error"), errorMssge);	
+	}
+
+void CDialogBase::DisplayError(TDesC& aMessage)
+	{
+	//could check don't go out of bounds
+	TBuf<250> errorMssge(aMessage);
+	iEikonEnv->InfoWinL(_L("Error"), errorMssge);	
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_Document.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,36 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "ResourceHandler.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.
+//
+CResourceDocument::CResourceDocument(CEikApplication& aApp)
+		: CXKNDOCUMENT(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* CResourceDocument::CreateAppUiL()
+	{
+    return new(ELeave) CResourceAppUi;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_Main.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,53 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "ResourceHandler.h"
+#ifdef TV
+#include <eikstart.h>
+#endif
+
+//             The entry point for the application code. It creates
+//             an instance of the CApaApplication derived
+//             class, CResourceApplication.
+//
+
+
+#ifdef UIQ
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CResourceApplication;
+	}
+	
+//             This function is required by all EPOC32 DLLs. In this 
+//             Resource, it does nothing.
+//
+GLDEF_C TInt E32Dll(TDllReason)
+	{
+	return KErrNone;
+	}
+#endif
+
+#ifdef TV
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CResourceApplication;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_ResourceDetails.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,405 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "ResourceHandler.h"
+
+/**
+Gets process details for a process with the given name - assumed to be a valid process
+name.
+*/
+void TResourceDetails::GetProcessData(TDesC& aProcessName)
+	{
+		RProcess process;
+		process.Open(aProcessName);
+
+		// ID
+		iProcessData.iIdString.Format(KFormatDec,process.Id().Id());
+
+		// Store Process Name
+		iProcessData.iProcessName.Copy(aProcessName);
+		//to increase readability of resource table
+		AppendDotsToResourceName(iProcessData.iProcessName);
+		
+		// Priority
+		iProcessData.iPriorityString.Format(KFormatDec,process.Priority());
+		
+		// Protected
+
+		// System
+
+		// Owner
+		RProcess owner;
+		TInt err = KErrNotSupported;
+		if (err == KErrNone)
+			{
+			iProcessData.iOwnerIdString.Format(KFormatHex,owner.Id().Id());
+			}
+		else
+			{
+			iProcessData.iOwnerIdString.Format(KFormatHex,0);
+			}
+				
+		// Exit Type
+		TExitType et = process.ExitType();
+		switch(et)
+			{
+			case(0): iProcessData.iExitTypeString.Copy((_L("Kill"))); break;
+			case(1): iProcessData.iExitTypeString.Copy((_L("Terminate"))); break;
+			case(2): iProcessData.iExitTypeString.Copy((_L("Panic"))); break;
+			case(3): iProcessData.iExitTypeString.Copy((_L("Pending"))); break;
+			default: iProcessData.iExitTypeString.Copy((_L("Error!"))); break;
+			};
+		
+		// Exit Reason
+		TInt er = process.ExitReason();
+		if (er==0) iProcessData.iExitReasonString.Copy(_L("n/a"));
+		else
+			{
+			iProcessData.iExitReasonString.Format(KFormatHex,(TInt)er);
+			}
+
+		// Exit Category
+		TExitCategoryName ec;
+		ec = process.ExitCategory();
+		if (ec.Length() == 0) iProcessData.iExitCategoryName.Copy(_L("n/a"));
+		else iProcessData.iExitCategoryName.Copy(ec);
+
+		// UIDs
+		TUidType uids = process.Type();
+		iProcessData.iUidType0String.Format(KFormatHex, uids[0].iUid);
+		iProcessData.iUidType1String.Format(KFormatHex, uids[1].iUid);
+		iProcessData.iUidType2String.Format(KFormatHex, uids[2].iUid);
+				
+		// File
+		iProcessData.iFileName = process.FileName();
+
+		process.Close();	
+	}
+	
+/**
+Gets process details for a drive with the properties. These properties are assumed 
+to be a valid.
+*/
+void TResourceDetails::GetDriveData(TInt aValidDriveNum, TDriveUnit aDriveUnit, TVolumeInfo aVolumeInfo)
+	{
+	iDriveData.iDriveName.Copy(aDriveUnit.Name());
+	iDriveData.iVolumeName.Copy(aVolumeInfo.iName);
+	iDriveData.iDriveNumberString.Format(KFormatDec, aValidDriveNum);
+
+	TBufC<20> mediaInfo;
+	switch (aVolumeInfo.iDrive.iType)
+		{
+		case EMediaNotPresent:mediaInfo=_L("EMediaNotPresent");break;
+		case EMediaUnknown:mediaInfo=_L("EMediaUnknown");break;
+		case EMediaFloppy:mediaInfo=_L("EMediaFloppy");break;
+		case EMediaHardDisk:mediaInfo=_L("EMediaHardDisk");break;
+		case EMediaCdRom:mediaInfo=_L("EMediaCdRom");break;
+		case EMediaRam:mediaInfo=_L("EMediaRam");break;
+		case EMediaFlash:mediaInfo=_L("EMediaFlash");break;
+		case EMediaRom:mediaInfo=_L("EMediaRom");break;
+		case EMediaRemote:mediaInfo=_L("EMediaRemote");break;
+		default:mediaInfo=_L("Other");break;
+		}
+
+	iDriveData.iMediaString.Copy(mediaInfo);
+	iDriveData.iAttributesString.Format(KFormatHex,aVolumeInfo.iDrive.iDriveAtt);
+	iDriveData.iSpaceString.Format(KFormatDec64,aVolumeInfo.iSize);
+	#if defined(WINS)
+		iDriveData.iFreeSpaceString.Copy(_L("Unavail."));
+	#else
+	if (aVolumeInfo.iFree.GetTInt() > aVolumeInfo.iSize.GetTInt()) // this value is odd on wins
+		{
+		iDriveData.iFreeSpaceString.Format(KFormatDec,aVolumeInfo.iSize.GetTInt());
+		}
+	else if (aVolumeInfo.iFree.GetTInt() < 0)
+		{
+		iDriveData.iFreeSpaceString.Copy(_L("InvalidVal"));
+		}
+	else
+		{
+		iDriveData.iFreeSpaceString.Format(KFormatDec,aVolumeInfo.iFree.GetTInt());
+		}
+	#endif
+	}
+	
+/**
+Gets thread details for a thread with the given name - assumed to be a valid name.
+*/
+void TResourceDetails::GetThreadData(TDesC& aThreadName)
+	{
+	RThread thread;
+	TInt err = thread.Open(aThreadName);
+	if (err == KErrNone)
+		{
+		// ID
+		iThreadData.iIdString.Format(KFormatDec,thread.Id().Id());
+
+		// Name
+		iThreadData.iThreadName.Copy(aThreadName);
+		
+		//to increase readability of resource table
+		AppendDotsToResourceName(iThreadData.iThreadName);
+
+		// Priority
+		iThreadData.iPriorityString.Format(KFormatDec,thread.Priority());
+
+		// Owner Process
+		RProcess owner;
+		thread.Process(owner);
+		iThreadData.iOwnerIdString.Format(KFormatDec,owner.Id().Id());
+
+		owner.Close();
+				
+		// Stack Size
+
+		TInt aHeapSize = 0, aStackSize = 0;
+		iThreadData.iStackSizeString.Format(KFormatHex,aStackSize);
+		iThreadData.iHeapSizeString.Format(KFormatHex,aHeapSize);
+		
+		// Protected
+
+		// System
+		
+		// Exit Type
+		TExitType et = thread.ExitType();
+		switch(et)
+			{
+			case(0): iThreadData.iExitTypeString.Copy((_L("Kill"))); break;
+			case(1): iThreadData.iExitTypeString.Copy((_L("Terminate"))); break;
+			case(2): iThreadData.iExitTypeString.Copy((_L("Panic"))); break;
+			case(3): iThreadData.iExitTypeString.Copy((_L("Pending"))); break;
+			default: iThreadData.iExitTypeString.Copy((_L("Error!"))); break;
+			};
+
+		// Exit Reason
+		
+		TInt er = thread.ExitReason();
+		if (er==0) iThreadData.iExitReasonString.Copy(_L("n/a"));
+		else iThreadData.iExitReasonString.Format(KFormatHex,(TInt)er);
+
+		// Exit Category
+
+		TExitCategoryName ec;
+		ec = thread.ExitCategory();
+		if (ec.Length() == 0) iThreadData.iExitCategoryName.Copy(_L("n/a"));
+		else iThreadData.iExitCategoryName.Copy(ec);
+
+		thread.Close();
+		}
+	}
+	
+/**
+Gets details for a chunk using the given TFindChunk and name.
+*/
+void TResourceDetails::GetChunkData(TFindChunk findHb, TDesC& aChunkName)
+	{	
+	RChunk chunk;
+	chunk.Open(findHb);
+
+	// Name
+	iChunkData.iChunkName.Copy(aChunkName);
+	
+	//to increase readability of resource table
+	AppendDotsToResourceName(iChunkData.iChunkName);
+
+	// Size
+	TInt chunkSize = 0;
+	iChunkData.iSizeString.Format(KFormatHex,chunkSize);
+
+	// Max Size
+
+	TInt chunkMaxSize = 0;
+	iChunkData.iMaxSizeString.Format(KFormatHex,chunkMaxSize);
+		
+	// Readable
+	if (chunk.IsReadable()) iChunkData.iReadableIndicator.Copy(_L("R"));
+	else iChunkData.iReadableIndicator.Copy(_L("-"));
+
+	// Writeable
+	if (chunk.IsWritable()) iChunkData.iWritableIndicator.Copy(_L("W"));
+	else iChunkData.iWritableIndicator.Copy(_L("-"));
+			
+	chunk.Close();
+	}
+
+/**
+Gets details for a mutex using the given TFindMutex and name.
+*/
+void TResourceDetails::GetMutexData(TFindMutex& findHb, TDesC& aMutexName)
+	{	
+	RMutex mutex;
+	
+	// Name
+	iMutexData.iMutexName.Copy(aMutexName);	
+	
+	//to increase readability of resource table
+	AppendDotsToResourceName(iMutexData.iMutexName);
+		
+	// Count
+	mutex.Open(findHb);
+	TInt count = 0;
+	iMutexData.iHexCountString.Format(KFormatHex, count);
+	iMutexData.iDecCountString.Format(KFormatDec, count);
+	mutex.Close();
+	}
+	
+/**
+Gets details for a mutex using the given TFindSemaphore and name.
+*/
+void TResourceDetails::GetSemaphoreData(TFindSemaphore& findHb, TDesC& aSemaphoreName)
+	{			
+		RSemaphore sem;
+		// Name
+		iSemaphoreData.iSemaphoreName.Copy(aSemaphoreName);
+		//to increase readability of resource table
+		AppendDotsToResourceName(iSemaphoreData.iSemaphoreName);
+		iSemaphoreData.iSemaphoreName.AppendFill('.', KMaxFullName - iSemaphoreData.iSemaphoreName.Length());
+		
+		// Count
+		sem.Open(findHb);
+		TInt count = 0;
+		iSemaphoreData.iHexCountString.Format(KFormatHex,count);
+	
+		iSemaphoreData.iDecCountString.Format(KFormatDec,count);
+		
+		sem.Close();
+		}
+
+/**
+Gets details for a HAL entry. Assumes that the parameters are valid.
+*/
+void TResourceDetails::GetHalData(TInt aValidEntryNum, HAL::SEntry* aSEntry)
+	{
+	iHalData.iNumberString.Format(KFormatDec,aValidEntryNum);
+
+	TBuf<100> halName;
+	switch (aValidEntryNum)
+		{
+		case HALData::EManufacturer:	halName=_L("EManufacturer");break;
+		case HALData::EManufacturerHardwareRev:	halName=_L("EManufacturerHardwareRev");break;
+		case HALData::EManufacturerSoftwareRev:	halName=_L("EManufacturerSoftwareRev");break;
+		case HALData::EManufacturerSoftwareBuild:	halName=_L("EManufacturerSoftwareBuild");break;
+		case HALData::EModel:	halName=_L("EModel");break;
+		case HALData::EMachineUid:	halName=_L("EMachineUid");break;
+		case HALData::EDeviceFamily:	halName=_L("EDeviceFamily");break;
+		case HALData::EDeviceFamilyRev:	halName=_L("EDeviceFamilyRev");break;
+		case HALData::ECPU:	halName=_L("ECPU");break;
+		case HALData::ECPUArch:	halName=_L("ECPUArch");break;
+		case HALData::ECPUABI:	halName=_L("ECPUABI");break;
+		case HALData::ECPUSpeed:	halName=_L("ECPUSpeed");break;
+		case HALData::ESystemStartupReason:	halName=_L("ESystemStartupReason");break;
+		case HALData::ESystemException:	halName=_L("ESystemException");break;
+		case HALData::ESystemTickPeriod:	halName=_L("ESystemTickPeriod");break;
+		case HALData::EMemoryRAM:	halName=_L("EMemoryRAM");break;
+		case HALData::EMemoryRAMFree:	halName=_L("EMemoryRAMFree");break;	
+		case HALData::EMemoryROM:	halName=_L("EMemoryROM");break;
+		case HALData::EMemoryPageSize:	halName=_L("EMemoryPageSize");break;
+		case HALData::EPowerGood:	halName=_L("EPowerGood");break;
+		case HALData::EPowerBatteryStatus:	halName=_L("EPowerBatteryStatus");break;
+		case HALData::EPowerBackup:	halName=_L("EPowerBackup");break;	
+		case HALData::EPowerBackupStatus:	halName=_L("EPowerBackupStatus");break;
+		case HALData::EPowerExternal:	halName=_L("EPowerExternal");break;
+		case HALData::EKeyboard:	halName=_L("EKeyboard");break;
+		case HALData::EKeyboardDeviceKeys:	halName=_L("EKeyboardDeviceKeys");break;
+		case HALData::EKeyboardAppKeys:	halName=_L("EKeyboardAppKeys");break;
+		case HALData::EKeyboardClick:	halName=_L("EKeyboardClick");break;
+		case HALData::EKeyboardClickState:	halName=_L("EKeyboardClickState");break;
+		case HALData::EKeyboardClickVolume:	halName=_L("EKeyboardClickVolume");break;
+		case HALData::EKeyboardClickVolumeMax:	halName=_L("EKeyboardClickVolumeMax");break;
+		case HALData::EDisplayXPixels:	halName=_L("EDisplayXPixels");break;
+		case HALData::EDisplayYPixels:	halName=_L("EDisplayYPixels");break;
+		case HALData::EDisplayXTwips:	halName=_L("EDisplayXTwips");break;
+		case HALData::EDisplayYTwips:	halName=_L("EDisplayYTwips");break;
+		case HALData::EDisplayColors:	halName=_L("EDisplayColors");break;
+		case HALData::EDisplayState:	halName=_L("EDisplayState");break;
+		case HALData::EDisplayContrast:	halName=_L("EDisplayContrast");break;
+		case HALData::EDisplayContrastMax:	halName=_L("EDisplayContrastMax");break;
+		case HALData::EBacklight:	halName=_L("EBacklight");break;
+		case HALData::EBacklightState:	halName=_L("EBacklightState");break;
+		case HALData::EPen:	halName=_L("EPen");break;
+		case HALData::EPenX:	halName=_L("EPenX");break;
+		case HALData::EPenY:	halName=_L("EPenY");break;
+		case HALData::EPenDisplayOn:	halName=_L("EPenDisplayOn");break;
+		case HALData::EPenClick:	halName=_L("EPenClick");break;
+		case HALData::EPenClickState:	halName=_L("EPenClickState");break;
+		case HALData::EPenClickVolume:	halName=_L("EPenClickVolume");break;
+		case HALData::EPenClickVolumeMax:	halName=_L("EPenClickVolumeMax");break;
+		case HALData::EMouse:	halName=_L("EMouse");break;
+		case HALData::EMouseX:	halName=_L("EMouseX");break;
+		case HALData::EMouseY:	halName=_L("EMouseY");break;
+		case HALData::EMouseState:	halName=_L("EMouseState");break;
+		case HALData::EMouseSpeed:	halName=_L("EMouseSpeed");break;
+		case HALData::EMouseAcceleration:	halName=_L("EMouseAcceleration");break;
+		case HALData::EMouseButtons:	halName=_L("EMouseButtons");break;
+		case HALData::EMouseButtonState:	halName=_L("EMouseButtonState");break;
+		case HALData::ECaseState:	halName=_L("ECaseState");break;
+		case HALData::ECaseSwitch:	halName=_L("ECaseSwitch");break;
+		case HALData::ECaseSwitchDisplayOn:	halName=_L("ECaseSwitchDisplayOn");break;
+		case HALData::ECaseSwitchDisplayOff:	halName=_L("ECaseSwitchDisplayOff");break;
+		case HALData::ELEDs:	halName=_L("ELEDs");break;
+		case HALData::ELEDmask:	halName=_L("ELEDmask");break;
+		case HALData::EIntegratedPhone:	halName=_L("EIntegratedPhone");break;
+		case HALData::EDisplayBrightness:	halName=_L("EDisplayBrightness");break;
+		case HALData::EDisplayBrightnessMax:	halName=_L("EDisplayBrightnessMax");break;
+		case HALData::EKeyboardBacklightState:	halName=_L("EKeyboardBacklightState");break;
+		case HALData::EAccessoryPower:	halName=_L("EAccessoryPower");break;
+		case HALData::ELanguageIndex:	halName=_L("ELanguageIndex");break;
+		case HALData::EKeyboardIndex:	halName=_L("EKeyboardIndex");break;
+		case HALData::EMaxRAMDriveSize:	halName=_L("EMaxRAMDriveSize");break;
+		case HALData::EKeyboardState:	halName=_L("EKeyboardState");break;
+		case HALData::ESystemDrive:	halName=_L("ESystemDrive");break;
+		case HALData::EPenState:	halName=_L("EPenState");break;
+		case HALData::EDisplayIsMono:	halName=_L("EDisplayIsMono");break;
+		case HALData::EDisplayIsPalettized:	halName=_L("EDisplayIsPalettized");break;
+		case HALData::EDisplayBitsPerPixel:	halName=_L("EDisplayBitsPerPixel");break;
+		case HALData::EDisplayNumModes:	halName=_L("EDisplayNumModes");break;
+		case HALData::EDisplayMemoryAddress:	halName=_L("EDisplayMemoryAddress");break;
+		case HALData::EDisplayOffsetToFirstPixel:	halName=_L("EDisplayOffsetToFirstPixel");break;
+		case HALData::EDisplayOffsetBetweenLines:	halName=_L("EDisplayOffsetBetweenLines");break;
+		case HALData::EDisplayPaletteEntry:	halName=_L("EDisplayPaletteEntry");break;
+		case HALData::EDisplayIsPixelOrderRGB:	halName=_L("EDisplayIsPixelOrderRGB");break;
+		case HALData::EDisplayIsPixelOrderLandscape:	halName=_L("EDisplayIsPixelOrderLandscape");break;
+		case HALData::EDisplayMode:	halName=_L("EDisplayMode");break;
+		case HALData::ESwitches:	halName=_L("ESwitches");break;
+		case HALData::EDebugPort:	halName=_L("EDebugPort");break;
+		case HALData::ELocaleLoaded:	halName=_L("ELocaleLoaded");break;
+		case HALData::ENumHalAttributes:	halName=_L("ENumHalAttributes");break;
+		default:halName=_L("Unknown");break;
+		}
+
+		iHalData.iName.Copy(halName);		
+
+		if (aSEntry[aValidEntryNum].iProperties & HAL::EEntryDynamic)
+			iHalData.iDynamicIndicator=_L("D");
+		else iHalData.iDynamicIndicator=_L("-");
+		
+		iHalData.iDecValString.Format(KFormatDec,aSEntry[aValidEntryNum].iValue);
+			
+		iHalData.iHexValString.Format(KFormatHex,aSEntry[aValidEntryNum].iValue);
+		}
+
+/**
+Appends dots (after 3 spaces) to a resource name.
+Used for names of resources in a table - so you can follow the dots to read the
+resource details.
+*/
+void TResourceDetails::AppendDotsToResourceName(TFullName& aResourceName)
+	{
+	if (aResourceName.Length() < KMaxFullName - 3)
+			aResourceName.AppendFill(' ', 3);
+		aResourceName.AppendFill('.', KMaxFullName - aResourceName.Length());
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_ResourceList.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,764 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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 "ResourceHandler.h"
+
+#include <techview/eiktxlbm.h> //CTextListBoxModel
+
+void CResourceList::ConstructL(TInt aTablePosition)
+	{
+		// Create the basic list box        
+	iListBox = new(ELeave) CEikColumnListBox;
+	iListBox->ConstructL( this ); //This view is parent. No flags. Also constructs the associated list box model and item drawer for the list box.
+
+	iListBox->SetContainerWindowL( *this );
+	iListBox->CreateScrollBarFrameL( );
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto);  
+  
+	iListBox->SetPosition(TPoint(iBorder, aTablePosition + iBorder));
+
+	iListBox->SetSize(Rect().Size()-TSize(0, aTablePosition) -TSize(iBorder*2,iBorder*2));
+
+	iListBox->ActivateL();
+	
+	iModel = iListBox->Model();
+	
+	iTextArray = iModel->ItemTextArray();
+	iListBoxItems = static_cast<CDesCArray*>(iTextArray);
+	iListBoxData = STATIC_CAST(CColumnListBoxItemDrawer*,iListBox->View()->ItemDrawer())->ColumnData();
+	
+	}
+
+CResourceList::~CResourceList()
+	{
+	delete iListBox;
+    iModel = NULL;
+	iTextArray = NULL;
+	iListBoxItems = NULL;
+	iListBoxData = NULL;
+	}
+
+CCoeControl* CResourceList::GetListBox() const
+	{
+	return iListBox;
+	}
+
+void CResourceList::EmptyList()
+	{
+	iListBoxItems->Reset();
+	iListBox->Reset();
+	}
+
+#ifdef UIQ
+#define CW_Id 40
+#define CW_HalId 35
+#define CW_DriveAtt 35
+#define CW_Short 45
+#define CW_UID 75
+#define CW_ExT_R 50
+#define CW_Medium 60
+#define CW_Long 90
+#define CW_Priority 60
+#define CW_ProcessId 70
+#define CW_Read 50
+#define CW_Writeable 70
+#define CW_Dynamic 60
+#define CW_List 60
+#define CW_DriveSize 70
+#define CW_Count 80
+#define CW_MemSize 90 
+#define CW_HalName 200
+#define CW_MutexName 280
+#define CW_Media 120
+#define CW_Name 135
+#define CW_ProcessName 220
+#define CW_ExitCat 80
+#define CW_ChunkName 380
+#define CW_SemName 300
+#define CW_ThreadName 370
+#define CW_LongName 250
+#define CW_Message 250
+#define CW_FileName 400
+#define GapWidth 10
+#endif
+#ifdef TV
+#define CW_Id 25
+#define CW_HalId 45
+#define CW_DriveAtt 60
+#define CW_Short 60
+#define CW_UID 100
+#define CW_Medium 90
+#define CW_Long 115
+#define CW_Priority 85
+#define CW_ProcessId 95
+#define CW_Writeable 90
+#define CW_Read 70
+#define CW_Name 195
+#define CW_ProcessName 195
+#define CW_ExitCat 185
+#define CW_ChunkName 350
+#define CW_SemName 305
+#define CW_HalName 260
+#define CW_ThreadName 380
+#define CW_LongName 380
+#define CW_Message 380
+#define CW_ExT_R 70
+#define CW_MutexName 305
+#define CW_FileName 500
+#define CW_Media 140
+#define CW_List 150
+#define CW_Dynamic 100
+#define CW_Count 115
+#define CW_MemSize 130
+#define GapWidth 25
+#endif
+
+void CResourceList::SetUpProcessTable()
+{
+		// deal with the columns
+	iListBoxData->SetColumnWidthPixelL( 0, CW_Id );
+	iListBoxData->SetColumnWidthPixelL( 1, CW_ProcessName );
+	iListBoxData->SetColumnAlignmentL( 1, CGraphicsContext::ELeft);
+	iListBoxData->SetColumnWidthPixelL( 2, CW_Medium ); //Priority
+	iListBoxData->SetColumnAlignmentL( 2, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 3, CW_Short ); //Prot?
+	iListBoxData->SetColumnAlignmentL( 3, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 4, CW_Short ); //Sys?
+	iListBoxData->SetColumnAlignmentL( 4, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 5, CW_Short ); //Owner Id
+	iListBoxData->SetColumnAlignmentL( 5, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 6, CW_Medium ); //Exit T.
+	iListBoxData->SetColumnAlignmentL( 6, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 7, CW_Short ); // Exit R
+	iListBoxData->SetColumnAlignmentL( 7, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 8, CW_Short ); // Exit C
+	iListBoxData->SetColumnAlignmentL( 8, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 9, CW_UID ); // Uid 0
+	iListBoxData->SetColumnAlignmentL( 9, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 10, CW_UID ); //Uid 1
+	iListBoxData->SetColumnAlignmentL( 10, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 11, CW_UID + GapWidth ); // Uid 2
+	iListBoxData->SetColumnAlignmentL( 11, CGraphicsContext::ERight);
+	iListBoxData->SetColumnHorizontalGapL(11, GapWidth);
+	iListBoxData->SetColumnWidthPixelL( 12, CW_FileName ); // File Name
+	iListBoxData->SetColumnHorizontalGapL(12, GapWidth);
+
+	TBuf<1000> titles(_L("Id\tName\tPriority\tProt?\tSys?\tOwner\tExit T.\tExit R.\tExit C.\tUid 0\tUid 1\tUid 2\tExecutable File"));
+	iListBoxItems->AppendL(titles);
+}
+
+void CResourceList::SetUpThreadTable()
+{
+	iListBoxData->SetColumnWidthPixelL( 0, CW_Id );
+	iListBoxData->SetColumnWidthPixelL( 1, CW_ThreadName );
+	iListBoxData->SetColumnAlignmentL( 1, CGraphicsContext::ELeft);
+	iListBoxData->SetColumnWidthPixelL( 2, CW_Priority ); //Priority
+	iListBoxData->SetColumnAlignmentL( 2, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 3, CW_ProcessId ); //ProcessId
+	iListBoxData->SetColumnAlignmentL( 3, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 4, CW_Medium ); //Stack Sz
+	iListBoxData->SetColumnAlignmentL( 4, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 5, CW_Medium ); //Heap Sz
+	iListBoxData->SetColumnAlignmentL( 5, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 6, CW_Short ); //Prot?
+	iListBoxData->SetColumnAlignmentL( 6, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 7, CW_Short ); //Sys?
+	iListBoxData->SetColumnAlignmentL( 7, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 8, CW_Medium ); //Exit T.
+	iListBoxData->SetColumnAlignmentL( 8, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 9, CW_Short ); //Exit R.
+	iListBoxData->SetColumnAlignmentL( 9, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 10, CW_Short ); //Exit C.
+	iListBoxData->SetColumnAlignmentL( 10, CGraphicsContext::ERight);
+
+	TBuf<1000> titles(_L("Id\tName\tPriority\tProcess\tStack Sz\tHeap Sz\tProt?\tSys?\tExit T.\tExit R.\tExit C."));
+	iListBoxItems->AppendL(titles);
+}
+
+void CResourceList::SetUpChunkTable()
+{
+	iListBoxData->SetColumnWidthPixelL( 0, CW_ChunkName );
+	iListBoxData->SetColumnWidthPixelL( 1, CW_Medium );
+	iListBoxData->SetColumnAlignmentL(1, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 2, CW_Medium + GapWidth );
+	iListBoxData->SetColumnAlignmentL(2, CGraphicsContext::ERight);	
+	iListBoxData->SetColumnHorizontalGapL( 2, GapWidth);
+	iListBoxData->SetColumnWidthPixelL( 3, CW_Read );
+	iListBoxData->SetColumnAlignmentL( 3, CGraphicsContext::ELeft);
+	iListBoxData->SetColumnWidthPixelL( 4, CW_Writeable );
+	iListBoxData->SetColumnAlignmentL( 4, CGraphicsContext::ELeft);
+
+	TBuf<1000> titles(_L("Name\tSize\tMax Size\tRead-/\tWrite-able"));
+	iListBoxItems->AppendL(titles);
+}
+
+void CResourceList::SetUpSemaphoreTable()
+{
+	iListBoxData->SetColumnWidthPixelL( 0, CW_SemName );
+	iListBoxData->SetColumnWidthPixelL( 1, CW_Count );
+	iListBoxData->SetColumnAlignmentL(1, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 2, CW_Count );
+	iListBoxData->SetColumnAlignmentL(2, CGraphicsContext::ERight);
+
+	TBuf<1000> titles(_L("Name\tHex Count\tDec Count"));
+	iListBoxItems->AppendL(titles);
+}
+
+void CResourceList::SetUpMutexTable()
+{
+	iListBoxData->SetColumnWidthPixelL( 0, CW_MutexName );
+	iListBoxData->SetColumnWidthPixelL( 1, CW_Count );
+	iListBoxData->SetColumnAlignmentL(1, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 2, CW_Count );
+	iListBoxData->SetColumnAlignmentL(2, CGraphicsContext::ERight);
+
+	TBuf<1000> titles(_L("Name\tHex Count\tDec Count"));
+	iListBoxItems->AppendL(titles);
+}
+
+
+void CResourceList::SetUpDriveTable()
+{
+	iListBoxData->SetColumnWidthPixelL( 0, CW_Short );
+	iListBoxData->SetColumnWidthPixelL( 1, CW_Long );
+	iListBoxData->SetColumnAlignmentL( 1, CGraphicsContext::ELeft);	
+	iListBoxData->SetColumnHorizontalGapL( 1, GapWidth);
+	iListBoxData->SetColumnWidthPixelL( 2, CW_Short + GapWidth );
+	iListBoxData->SetColumnAlignmentL( 2, CGraphicsContext::ELeft);	
+	iListBoxData->SetColumnHorizontalGapL(2, GapWidth);
+	iListBoxData->SetColumnWidthPixelL( 3, CW_Media ); //Media
+	iListBoxData->SetColumnAlignmentL( 3, CGraphicsContext::ELeft);
+	iListBoxData->SetColumnWidthPixelL( 4, CW_DriveAtt ); //Attr.
+	iListBoxData->SetColumnAlignmentL( 4, CGraphicsContext::ELeft);
+	iListBoxData->SetColumnWidthPixelL( 5, CW_MemSize );
+	iListBoxData->SetColumnAlignmentL(5, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 6, CW_MemSize );
+	iListBoxData->SetColumnAlignmentL(6, CGraphicsContext::ERight);
+	#if defined(WINS)
+	iListBoxData->SetColumnWidthPixelL( 7, CW_Message );
+	iListBoxData->SetColumnAlignmentL(7, CGraphicsContext::ELeft);
+	#endif
+
+	TBuf<1000> titles(_L("Drive\tVol. name\tNo.\tMedia\tAtt.\tSize (bytes)\tFree (bytes)"));
+	#if defined(WINS)
+	titles.Append(_L("\t(not retrievable in WINS)"));
+	#endif
+	iListBoxItems->AppendL(titles);
+}
+
+void CResourceList::SetUpHalTable()
+{
+	iListBoxData->SetColumnWidthPixelL( 0, CW_HalId );
+	iListBoxData->SetColumnWidthPixelL( 1, CW_HalName );
+	iListBoxData->SetColumnAlignmentL(1, CGraphicsContext::ELeft);
+	iListBoxData->SetColumnWidthPixelL( 2, CW_Dynamic );
+	iListBoxData->SetColumnAlignmentL( 2, CGraphicsContext::ECenter);
+	iListBoxData->SetColumnWidthPixelL( 3, CW_MemSize );
+	iListBoxData->SetColumnAlignmentL(3, CGraphicsContext::ERight);
+	iListBoxData->SetColumnWidthPixelL( 4, CW_MemSize );
+	iListBoxData->SetColumnAlignmentL(4, CGraphicsContext::ERight);
+
+	TBuf<1000> titles(_L("No.\tName\tDynamic\tDec Value\tHex Value"));
+	iListBoxItems->AppendL(titles);
+}
+
+void CResourceList::SetUpList()
+{
+	iListBoxData->SetColumnWidthPixelL( 0, 300 );
+}
+	
+void CResourceList::UpdateListData()
+	{
+	CResourceList::EmptyList();
+
+	switch (iObjectsViewed)
+		{
+		case EObjectProcess: 
+			SetUpProcessTable();
+			break;
+		case EObjectThread: 
+			SetUpThreadTable();
+			break;
+		case EObjectChunk: 
+			SetUpChunkTable();
+			break;
+		case EObjectLibrary:  
+			SetUpList();
+			break;
+		case EObjectServer: 
+			SetUpList();
+			break;
+		case EObjectSemaphore:  
+			SetUpSemaphoreTable(); 
+			break;
+		case EObjectMutex: 
+			SetUpMutexTable();
+			break;
+		case EObjectLogicalDevice: 
+			SetUpList();
+			break;
+		case EObjectPhysicalDevice: 
+			SetUpList();
+			break;
+		case EObjectLogicalChannel: 
+			SetUpList();
+			break;
+		case EObjectWindow: 
+			SetUpList();
+			break;
+		case EObjectDrive:  
+			SetUpDriveTable();
+			break;
+		case EObjectHal: 
+			SetUpHalTable();
+			break;
+		default: break;
+		}
+	GetResourceList();
+	}
+
+void CResourceList::GetResourceList()
+	{
+	switch(iObjectsViewed)	
+		{
+		case EObjectProcess: 
+			GetProcessList();
+			break;
+		case EObjectThread:
+			GetThreadList();
+			break;
+		case EObjectChunk:
+			GetChunkList();
+			break;
+		case EObjectLibrary:
+			GetLibraryList();
+			break;
+		case EObjectServer:
+			GetServerList();
+			break;
+		case EObjectSemaphore:
+			GetSemaphoreList();
+			break;
+		case EObjectMutex:
+			GetMutexList();
+			break;
+		case EObjectLogicalDevice:
+			GetLogicalDeviceList();
+			break;
+		case EObjectPhysicalDevice:
+			GetPhysicalDeviceList();
+			break;
+		case EObjectLogicalChannel:
+			GetLogicalChannelList();
+			break;
+		case EObjectWindow:
+			GetWindowList();
+			break;
+		case EObjectDrive:
+			GetDriveList();
+			break;
+		case EObjectHal:
+			GetHalList();
+			break;
+		default:
+			break;
+		}
+	}
+
+void CResourceList::GetProcessList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindProcess findHb;
+	findHb.Find(prefix);
+	TFullName name;
+	
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		GetProcessData(name);
+		AddRow( iProcessData);
+		}
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetThreadList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindThread findHb;
+	findHb.Find(prefix);
+	TFullName name;
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		GetThreadData(name);
+		AddRow( iThreadData);
+		}
+	UpdateResourceCount(number);
+	}
+
+
+void CResourceList::GetChunkList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindChunk findHb;
+	findHb.Find(prefix);
+	TFullName name;
+
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		GetChunkData(findHb, name);
+
+		AddRow(iChunkData);
+		}
+
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetLibraryList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindLibrary findHb;
+	findHb.Find(prefix);
+	TFullName name;
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		// Name
+		iListData.iName.Copy(name);
+		AddRow(iListData);
+		}
+
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetServerList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindServer findHb;
+	findHb.Find(prefix);
+	TFullName name;
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		iListData.iName.Copy(name);
+		AddRow(iListData);
+
+		}
+
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetSemaphoreList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindSemaphore findHb;
+	findHb.Find(prefix);
+	TFullName name;
+
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		GetSemaphoreData(findHb, name);
+		AddRow(iSemaphoreData);
+		}
+
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetMutexList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindMutex findHb;
+	findHb.Find(prefix);
+	TFullName name;
+
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		GetMutexData(findHb, name);
+		AddRow(iMutexData);
+		}
+
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetLogicalDeviceList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindLogicalDevice findHb;
+	findHb.Find(prefix);
+	TFullName name;
+
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		iListData.iName.Copy(name);
+		AddRow(iListData);
+		}
+
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetPhysicalDeviceList(void)
+	{
+	TName prefix(KAsterisk);
+	TFindPhysicalDevice findHb;
+	findHb.Find(prefix);
+	TFullName name;
+
+	TInt number=0;
+	while (findHb.Next(name)==KErrNone)
+		{
+		number++;
+		iListData.iName.Copy(name);
+		AddRow(iListData);
+
+		}
+
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetLogicalChannelList(void)
+	{
+	UpdateResourceCount(0);
+	}
+
+void CResourceList::GetWindowList(void)
+	{
+	RWsSession ws;
+	TInt err = ws.Connect();
+	if (err == KErrNone)
+		{
+
+		TInt number = ws.NumWindowGroups(0);
+
+		CArrayFixFlat<TInt>* wgIds = new(ELeave) CArrayFixFlat<TInt>(number);
+
+		ws.WindowGroupList(0,wgIds);
+
+		CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(ws);
+
+		for (TInt i=0; i<number; ++i)
+			{
+			TInt wgId=(*wgIds)[i];
+
+			wgName->ConstructFromWgIdL(wgId);
+			iListData.iName.Copy(wgName->Caption());
+			AddRow(iListData);
+
+			}
+		CleanupStack::PopAndDestroy(wgName);
+
+		delete wgIds;
+		wgIds = NULL;
+
+		UpdateResourceCount(number);
+		
+		ws.Close();
+		}
+	}
+
+void CResourceList::GetDriveList()
+	{
+	RFs fileServer;	
+	User::LeaveIfError(fileServer.Connect());
+	TInt err1,err2;
+	TInt number=0;
+	TInt driveNum=0;
+
+	TDriveInfo driveInfo;
+	TVolumeInfo volumeInfo;
+	TDriveUnit driveUnit(EDriveA);
+
+
+	do {
+		driveUnit = driveNum;
+		err1 = fileServer.Volume(volumeInfo,driveUnit);
+		err2 = fileServer.Drive(driveInfo, driveUnit);
+		if (err1==KErrNone && err2==KErrNone)
+			{
+			GetDriveData(driveNum, driveUnit, volumeInfo); //sets drive data to iDriveData
+			AddRow(iDriveData);
+			number++;
+			}
+		driveNum++;
+		} while (driveNum <= EDriveZ);
+	fileServer.Close();
+	UpdateResourceCount(number);
+	}
+
+void CResourceList::GetHalList()
+	{
+	TInt number=0;
+
+	HAL::SEntry* aSEntry = NULL;
+	TInt numOfEntries, error;
+	error = HAL::GetAll(numOfEntries, aSEntry);
+		
+	if (error ==KErrNone)
+		{
+		for (TInt iEntryNum=0; iEntryNum<numOfEntries; ++iEntryNum)
+			{
+			if (aSEntry[iEntryNum].iProperties & HAL::EEntryValid)
+				{
+				number++;
+				GetHalData(iEntryNum, aSEntry);
+
+				AddRow(iHalData);
+
+				}
+			}
+		}
+
+	UpdateResourceCount(number);
+	User::Free(aSEntry);
+	}
+
+void CResourceList::AddRow(const TProcessData& aProcessData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t"), &aProcessData.iIdString,
+																				&aProcessData.iProcessName,
+																				&aProcessData.iPriorityString,
+																				&aProcessData.iProtectedIndicator,
+																				&aProcessData.iSystemIndicator,
+																				&aProcessData.iOwnerIdString,
+																				&aProcessData.iExitTypeString,
+																				&aProcessData.iExitReasonString,
+																				&aProcessData.iExitCategoryName,
+																				&aProcessData.iUidType0String,
+																				&aProcessData.iUidType1String,
+																				&aProcessData.iUidType2String,
+																				&aProcessData.iFileName);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawDeferred();
+}
+
+void CResourceList::AddRow(const TChunkData& aChunkData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S\t%S\t%S\t%S\t%S"), &aChunkData.iChunkName,
+										  &aChunkData.iSizeString,
+										  &aChunkData.iMaxSizeString,
+										  &aChunkData.iReadableIndicator,
+										  &aChunkData.iWritableIndicator);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawDeferred();
+}
+
+void CResourceList::AddRow(const TThreadData& aThreadData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t%S\t"), &aThreadData.iIdString,
+																	&aThreadData.iThreadName,
+																	&aThreadData.iPriorityString,
+																	&aThreadData.iOwnerIdString,
+																	&aThreadData.iStackSizeString,
+																	&aThreadData.iHeapSizeString,
+																	&aThreadData.iProtectedIndicator,
+																	&aThreadData.iSystemIndicator,
+																	&aThreadData.iExitTypeString,
+																	&aThreadData.iExitReasonString,
+																	&aThreadData.iExitCategoryName);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL(); 
+	iListBox->DrawDeferred();
+}
+
+void CResourceList::AddRow(const TSemaphoreData& aSemaphoreData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S\t%S\t%S\t"), &aSemaphoreData.iSemaphoreName,
+									&aSemaphoreData.iHexCountString,
+									&aSemaphoreData.iDecCountString);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawDeferred();
+}
+
+void CResourceList::AddRow(const TMutexData& aMutexData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S\t%S\t%S\t"), &aMutexData.iMutexName,
+									&aMutexData.iHexCountString,
+									&aMutexData.iDecCountString);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawDeferred();
+}
+
+void CResourceList::AddRow(const TDriveData& aDriveData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S\t%S\t%S\t%S\t%S\t%S\t%S\t"), &aDriveData.iDriveName,
+												&aDriveData.iVolumeName,
+												&aDriveData.iDriveNumberString,
+												&aDriveData.iMediaString,
+												&aDriveData.iAttributesString,
+												&aDriveData.iSpaceString,
+												&aDriveData.iFreeSpaceString);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawDeferred();
+}
+
+void CResourceList::AddRow(const THalData& aHalData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S\t%S\t%S\t%S\t%S\t"), &aHalData.iNumberString,
+												&aHalData.iName,
+												&aHalData.iDynamicIndicator,
+												&aHalData.iDecValString,
+												&aHalData.iHexValString);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawDeferred();
+}
+
+void CResourceList::AddRow(const TListData& aListData)
+{
+	// The actual item text format depends on the listbox type, see tables with listbox types
+	TBuf<1000> item;
+	item.Format(_L("%S"), &aListData.iName);
+
+	iListBoxItems->AppendL(item);
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawDeferred();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_ResourceView.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,186 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Source file for the implementation of the 
+// application view class - CResourceView
+// 
+//
+
+#include "ResourceHandler.h"
+
+CResourceView::CResourceView()
+	{
+	}
+
+CResourceView* CResourceView::NewL(const TRect& aRect, CResourceAppUi *aAppUi)
+	{
+	CResourceView* self = new(ELeave) CResourceView();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect, aAppUi);
+	CleanupStack::Pop();
+	return self;
+	}
+
+CResourceView::~CResourceView()
+	{
+	delete iCommandButton;
+	}
+
+void CResourceView::ConstructL(const TRect& aRect, CResourceAppUi* aAppUi)
+    {
+	// Initialisation
+	iAppUi = aAppUi;
+	iObjectsViewed = EObjectProcess;
+
+	CreateWindowL();
+	           
+	// Whole extent of view
+	SetRect(aRect);
+
+	// Border around components in pixels
+	iBorder = 1;
+
+	// Place the refresh button	
+	iCommandButton = new(ELeave) CEikCommandButton;
+	iCommandButton->SetTextL(_L("Refresh"));
+	iCommandButton->SetSize(iCommandButton->MinimumSize());
+	iCommandButton->SetPosition(TPoint(Rect().Width() - iCommandButton->Size().iWidth - iBorder, iBorder));
+	iCommandButton->SetContainerWindowL(*this);
+	iCommandButton->SetObserver(this);
+	TInt buttonHeight = iCommandButton->Size().iHeight;	
+
+	// Get the title font height
+	TInt titleHeight = iEikonEnv->TitleFont()->HeightInPixels();
+	TInt tablePosition = 0;
+	if (titleHeight>=buttonHeight) 
+		tablePosition=titleHeight;
+	else
+		tablePosition=buttonHeight;
+
+	CResourceList::ConstructL(tablePosition);
+// Activate the main window control - this will also activate the contained controls
+	
+	ActivateL();
+	DrawNow();
+	}
+
+
+void CResourceView::Draw(const TRect& /*aRect*/) const
+	{
+	CWindowGc& gc = SystemGc();                     
+
+	gc.Clear();
+		
+	// Put title on view
+	const CFont* fontUsed = iEikonEnv->TitleFont();
+	gc.UseFont(fontUsed);
+	gc.SetPenColor(KRgbBlack);
+	TPoint pos(iBorder,fontUsed->AscentInPixels()+iBorder);
+	gc.DrawText(iTitle, pos);
+
+	gc.DiscardFont();
+	}
+
+
+
+TInt CResourceView::CountComponentControls() const
+	{
+	return 2;
+	}
+
+
+CCoeControl* CResourceView::ComponentControl(TInt aIndex) const
+	{
+	if (aIndex == 0)
+		return iCommandButton;
+	else 
+		return CResourceList::GetListBox();
+	}
+
+
+// for use by refresh button control
+void CResourceView::HandleControlEventL(CCoeControl* aControl,TCoeEvent /*aEventType*/)
+	{	
+	if (aControl == iCommandButton)
+		{
+		UpdateView();
+		}
+	}
+
+void CResourceView::InvalidateView(void) const
+	{
+	Window().Invalidate(Rect()); //calls Draw()
+	}
+
+void CResourceView::UpdateView(void)
+	{
+	CResourceList::UpdateListData();
+	UpdateTitle();
+	InvalidateView();
+	}
+
+void CResourceView::UpdateTitle(void)
+	{
+	// assume the table data, iResourceCount and iObjectViewed data are up to date
+	TBufC<20> title;
+
+	// Set the title appropriately
+	switch (iObjectsViewed)
+		{
+		case EObjectProcess: 
+			title = _L("Processes");
+			break;
+		case EObjectThread: 
+			title = _L("Threads");
+			break;
+		case EObjectChunk: 
+			title = _L("Chunks");  
+			break;
+		case EObjectLibrary: 
+			title = _L("Libraries"); 
+			break;
+		case EObjectServer: 
+			title = _L("Servers");  
+			break;
+		case EObjectSemaphore: 
+			title = _L("Semaphores"); 
+			break;
+		case EObjectMutex: 
+			title = _L("Mutexes");  
+			break;
+		case EObjectLogicalDevice: 
+			title = _L("Log. Devices"); 
+			break;
+		case EObjectPhysicalDevice: 
+			title = _L("Phy. Devices"); 
+			break;
+		case EObjectLogicalChannel: 
+			title = _L("Log. Channels"); 
+			break;
+		case EObjectWindow: 
+			title = _L("Window Grps"); 
+			break;
+		case EObjectDrive: 
+			title = _L("Drives");  
+			break;
+		case EObjectHal: 
+			title = _L("HALs");  
+			break;
+		default: break;
+		}
+		
+	//set title and resource count
+	TBuf<2> openingBracket(_L(" ("));
+	TBuf<1> closingBracket(_L(")"));
+	iTitle.Format(_L("%S%S%u%S"), &title, &openingBracket, iResourceCount, &closingBracket);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/group/ABLD.BAT	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\sf\app\techview\testapps\rschandler\TVResourceHandler\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/group/Bld.inf	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,19 @@
+// Copyright (c) 2000-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:
+//
+
+
+PRJ_MMPFILES
+
+ResourceHandler.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/group/ResourceHandler.mmp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,67 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies 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
+// 
+//
+
+#define TV
+
+
+TARGET        resourcehandler.exe
+TARGETTYPE    exe
+
+epocstacksize 0x5000
+
+UID           0x100039CE 0x101FD147
+
+CAPABILITY	ProtServ DiskAdmin
+
+SOURCEPATH    ../../Common/src
+SOURCE        ResourceHandler_Main.cpp
+SOURCE        ResourceHandler_Application.cpp
+SOURCE        ResourceHandler_Document.cpp
+SOURCE        ResourceHandler_AppUi.cpp
+SOURCE        ResourceHandler_ResourceView.cpp
+SOURCE	      ResourceHandler_Dialogs.cpp
+SOURCE	      ResourceHandler_ResourceList.cpp
+SOURCE	      ResourceHandler_ResourceDetails.cpp
+
+USERINCLUDE   . ../inc ../../Common/inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+#ifdef TV
+#endif
+
+
+START RESOURCE		../rsc/ResourceHandler.rss
+	HEADER
+	TARGETPATH		/resource/apps
+END
+
+START RESOURCE		../rsc/ResourceHandler_loc.rss
+	TARGETPATH		/resource/apps
+END
+
+START RESOURCE		../rsc/ResourceHandler_reg.rss
+	TARGETPATH		/private/10003a3f/apps
+END
+
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib ws32.lib apgrfx.lib
+LIBRARY		  eikcoctl.lib efsrv.lib eikctl.lib gdi.lib
+LIBRARY	      eikdlg.lib bafl.lib hal.lib 
+#ifdef UIQ
+LIBRARY	      qikctl.lib
+#endif
+
+VENDORID 0x70000001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_gt.mrp	Wed Sep 01 12:30:50 2010 +0100
@@ -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: 
+#
+
+component Testtools_ResourceHandler_GT
+
+# This component includes source for Techview, UIQ and Series 60 
+# versions of the ResourceHandler application.
+# The source is provided as part of the GT package but the
+# component will only build when the Techview system
+# files are available.
+
+source \sf\app\techview\testapps\rschandler
+
+notes_source	\component_defs\release.src
+
+
+
+ipr T 
+ipr B \sf\app\techview\testapps\rschandler\docs
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/group/Testtools_ResourceHandler_techview.mrp	Wed Sep 01 12:30:50 2010 +0100
@@ -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 "Eclipse Public License v1.0"
+# which accompanies 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 Testtools_ResourceHandler_Techview
+
+# The source is provided as part of the GT package but the
+# component will only build when the Techview system
+# files are available.
+
+exports \sf\app\techview\testapps\rschandler\TVResourceHandler\group
+binary  \sf\app\techview\testapps\rschandler\TVResourceHandler\group all
+
+notes_source	\component_defs\release.src
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/group/testtools_resourcehandler_gt.history.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="RESOURCE_HANDLER">
+  <purpose>
+  </purpose>
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/group/testtools_resourcehandler_techview.history.xml	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="RESOURCE_HANDLER_UI">
+  <purpose>
+  </purpose>
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/TVResourceHandler/inc/ResourceHandlerPlatform.hrh	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,17 @@
+// 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 "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#define TV
+#define WINS