htiui/HtiServicePlugins/HtiSysInfoServicePlugin/src/HtiSysInfoServicePlugin.cpp
branchRCL_3
changeset 43 48060abbbeaf
parent 42 d40e813b23c0
child 45 b3cee849fa46
--- a/htiui/HtiServicePlugins/HtiSysInfoServicePlugin/src/HtiSysInfoServicePlugin.cpp	Thu Jul 15 18:39:46 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3207 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  SysInfoPlugin implementation
-*
-*/
-
-
-// INCLUDE FILES
-#include "HtiSysInfoServicePlugin.h"
-#include "HtiLightsController.h"
-#include "HtiPropertySubscriber.h"
-#include <HtiDispatcherInterface.h>
-#include <HtiLogging.h>
-
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 )
-#include <aknkeylock.h>
-#include <ScreensaverInternalPSKeys.h>
-#endif
-
-#include <AknSkinsInternalCRKeys.h>
-#include <AknsSkinUID.h>
-#include <AknsSrvClient.h>
-#include <AknFepInternalCRKeys.h>
-#include <AknFepGlobalEnums.h> //For chinese input modes
-#include <CommonEngineDomainCRKeys.h>
-#include <featmgr.h>
-#include <bautils.h>
-#include <btengsettings.h>
-#include <btengdomaincrkeys.h>
-#include <bt_subscribe.h>
-#include <btmanclient.h>
-#include <centralrepository.h>
-#include <CoreApplicationUIsSDKCRKeys.h>
-#include <DRMRightsClient.h>
-#include <e32property.h>
-#include <etel.h>
-#include <etelmm.h>
-#include <hal.h>
-#include <ir_sock.h>
-#include <mmtsy_names.h>
-#include <rmmcustomapi.h>
-#include <hwrmpowerstatesdkpskeys.h>
-#include <settingsinternalcrkeys.h>
-#include <sysutil.h>
-#include <tz.h>
-
-// CONSTANTS
-const static TUid KSysInfoServiceUid = { 0x10210CC7 };
-
-// from irinternalpskey.h
-const static TUid KPSUidIrdaActivation = { 0x2000276D };
-
-const TInt KTimeDataLength = 7;
-const TInt KMaxBtNameLength = 30;
-const TInt KDateTimeFormatCmdLength = 6;
-
-const TInt KFepChineseInputModeLength = 10;
-
-_LIT( KTempFilePath, "\\" );
-_LIT( KTempFileName, "HtiTempFile.tmp" );
-_LIT( KMatchFileName, "HtiTempFile.tmp*" );
-_LIT( KDateSeparatorChars, ".:/-" );
-_LIT( KTimeSeparatorChars, ".:" );
-
-_LIT8( KErrDescrArgument, "Invalid argument" );
-_LIT8( KErrDescrNotSupported, "Command not supported" );
-_LIT8( KErrDescrHAL, "Error retrieving HAL attribute" );
-_LIT8( KErrDescrAttOutOfRange, "HAL attribute argument is out of range" );
-_LIT8( KErrDescrFreeRAM, "Error retrieving the amount of free RAM" );
-_LIT8( KErrDescrTotalRAM, "Error retrieving the amount of total RAM" );
-_LIT8( KErrDescrAllocRAM, "Error allocating RAM" );
-_LIT8( KErrDescrInvalidRAM, "Requested free RAM larger than currently free" );
-_LIT8( KErrDescrVolInfo, "Error retrieving volume info" );
-_LIT8( KErrDescrNotEnoughSpace, "Not enough disk space" );
-_LIT8( KErrDescrCreateTempFile, "Error creating temp file" );
-_LIT8( KErrDescrSetSizeTempFile, "Error allocating size for temp file" );
-_LIT8( KErrDescrDeleteTempFile, "Error deleting temp file" );
-_LIT8( KErrDescrSysUtil, "SysUtil failed" );
-_LIT8( KErrDescrSetTime, "Setting time failed" );
-_LIT8( KErrDescrDateTimeFormat, "Setting date and time formats failed" );
-_LIT8( KErrDescrSetLanguage, "Setting language failed");
-_LIT8( KErrDescrGetNetworkModes, "Getting network modes failed" );
-_LIT8( KErrDescrSetNetworkMode, "Setting network mode failed" );
-_LIT8( KErrDescrIrActivation, "IR activation failed" );
-_LIT8( KErrDescrGetBtPower, "Getting BT power state failed" );
-_LIT8( KErrDescrSetBtPower, "Setting BT power state failed" );
-_LIT8( KErrDescrBtOnDenied, "Turning BT on not allowed (Offline mode)" );
-_LIT8( KErrDescrBtOffDenied, "Turning BT off not allowed (active connections)" );
-_LIT8( KErrDescrBtSettings, "Bluetooth settings failed" );
-_LIT8( KErrDescrBtDeletePairings, "Deleting Bluetooth pairing(s) failed" );
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 )
-_LIT8( KErrDescrKeyLock, "Key lock toggle failed" );
-_LIT8( KErrDescrScreenSaver, "Setting screen saver state failed" );
-_LIT8( KErrDescrInvalidSSTimeout, "Invalid screen saver timeout value" );
-_LIT8( KErrDescrSSTimeoutFailed, "Setting screen saver timeout failed" );
-#endif
-_LIT8( KErrDescrInvalidTime, "Auto key guard time value too large (max 3600)" );
-_LIT8( KErrDescrAutoKeyGuardFailed, "Setting auto key guard time failed" );
-_LIT8( KErrDescrDrmDbConnect, "DRM DB connect failed." );
-_LIT8( KErrDescrDrmDbDelete,  "DRM DB delete failed." );
-_LIT8( KErrDescrBatteryLevel, "Getting battery level failed." );
-_LIT8( KErrDescrChargingStatus, "Getting charging status failed." );
-_LIT8( KErrDescrSignalStrength, "Getting signal strength failed." );
-_LIT8( KErrDescrMGUpdate, "Update Media Gallery failed" );
-_LIT8( KErrDescrActivateSkin, "Activating Skin failed" );
-
-enum TSysInfoCommand
-    {
-    ESysInfoHAL =             0x01,
-    ESysInfoIMEI=             0x02,
-    ESysInfoSWVersion =       0x03,
-    ESysInfoLangVersion =     0x04,
-    ESysInfoSWLangVersion =   0x05,
-    ESysInfoUserAgent =       0x06,
-    EFreeRAM =                0x07,
-    EUsedRAM =                0x08,
-    ETotalRAM =               0x09,
-    EEatRAM =                 0x0A,
-    EReleaseRAM =             0x0B,
-    EFreeDiskSpace =          0x0C,
-    EUsedDiskSpace =          0x0D,
-    ETotalDiskSize =          0x0E,
-    EEatDiskSpace =           0x0F,
-    EReleaseDiskSpace =       0x10,
-
-    ESysInfoSetHomeTime =     0x20,
-    ESysInfoGetHomeTime =     0x21,
-    ESetDateTimeFormat =      0x22,
-    
-    ESetLanguage =            0x25,
-
-    ELightStatus =            0x30,
-    ELightOn =                0x31,
-    ELightOff =               0x32,
-    ELightBlink =             0x33,
-    ELightRelease =           0x3A,
-
-    EScreenSaverDisable =     0x40,
-    EScreenSaverEnable  =     0x41,
-    EScreenSaverTimeout =     0x42,
-
-    ENetworkModeGet =         0x50,
-    ENetworkModeSet =         0x51,
-    ENetworkModeSetNoReboot = 0x52,
-    EHsdpaSet =               0x53,
-
-    EIrActivate =             0x5A,
-    EBtPower =                0x5B,
-    EBtSettings =             0x5C,
-    EBtDeletePairings =       0x5D,
-
-    EKeylockToggle =          0x60,
-    EAutoKeyGuardTime =       0x61,
-
-    EEmtpyDrmRightsDb =       0x65,
-
-    EBatteryStatus =          0x70,
-    ESignalStrength =         0x71,
-
-    EUpdateMediaGallery =     0x7A,
-
-    EActivateSkin =           0x80
-    };
-
-enum TGSNumberModes
-    {
-    EGSNbrModeLatin, EGSNbrModeArabic = 1, EGSNbrModeIndic = 1
-    };
-
-// Number mode type
-enum TGSNumberModeType
-    {
-    EGSNbrModeTypeArabic, EGSNbrModeTypeIndic, EGSNbrModeTypeEasternArabic
-    // for Urdu & Farsi languages
-    };
-
-//------------------------------------------------------------------------------
-// Create instance of concrete ECOM interface implementation
-//------------------------------------------------------------------------------
-CHtiSysInfoServicePlugin* CHtiSysInfoServicePlugin::NewL()
-    {
-    CHtiSysInfoServicePlugin* self = new (ELeave) CHtiSysInfoServicePlugin;
-    CleanupStack::PushL (self);
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-
-//------------------------------------------------------------------------------
-// Constructor
-//------------------------------------------------------------------------------
-CHtiSysInfoServicePlugin::CHtiSysInfoServicePlugin():
-    iMemEater( NULL ), iReply( NULL ), iGalleryUpdateSupported( ETrue )
-    {
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 )
-        iAllowSSValue = -1;
-        iAllowSSPropertyAttached = EFalse;
-#endif
-    }
-
-//------------------------------------------------------------------------------
-// Destructor
-//------------------------------------------------------------------------------
-CHtiSysInfoServicePlugin::~CHtiSysInfoServicePlugin()
-    {
-    HTI_LOG_TEXT( "CHtiSysInfoServicePlugin destroy" );
-    delete iMemEater;
-    delete iReply;
-
-    CleanUpTempFiles();
-    delete iFileMan;
-    iFs.Close();
-    delete iLightsController;
-
-    if ( iAllowSSSubscriber )
-        {
-        iAllowSSSubscriber->Unsubscribe();
-        }
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 )
-    iAllowSSProperty.Close();
-#endif 
-    delete iAllowSSSubscriber;
-    
-    FeatureManager::UnInitializeLib();
-    }
-
-//------------------------------------------------------------------------------
-// Second phase construction
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::ConstructL()
-    {
-    HTI_LOG_TEXT( "CHtiSysInfoServicePlugin::ConstructL" );
-    User::LeaveIfError( iFs.Connect() );
-    iFileMan = CFileMan::NewL( iFs );
-    
-    FeatureManager::InitializeLibL();
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::ProcessMessageL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::ProcessMessageL(const TDesC8& aMessage,
-                                THtiMessagePriority /*aPriority*/)
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::ProcessMessage" );
-    HTI_LOG_FORMAT( "Message length: %d", aMessage.Length() );
-
-    if ( aMessage.Length() > 0 )
-        {
-        HTI_LOG_FORMAT( "Command: %d", aMessage[0] );
-
-        switch ( aMessage[0] )
-            {
-            case ESysInfoHAL:
-                {
-                HTI_LOG_TEXT( "ESysInfoHAL" );
-                HandleGetHalAttrL( aMessage );
-                }
-                break;
-            case ESysInfoIMEI:
-                {
-                HTI_LOG_TEXT( "ESysInfoIMEI" );
-                HandleGetImeiL( aMessage );
-                }
-                break;
-            case ESysInfoSWVersion:
-                {
-                HTI_LOG_TEXT( "ESysInfoSWVersion" );
-                HandleGetSwVersionL( aMessage );
-                }
-                break;
-            case ESysInfoLangVersion:
-                {
-                HTI_LOG_TEXT( "ESysInfoLangVersion" );
-                HandleGetLangVersionL( aMessage );
-                }
-                break;
-            case ESysInfoSWLangVersion:
-                {
-                HTI_LOG_TEXT( "ESysInfoSWLangVersion" );
-                HandleGetSwLangVersionL( aMessage );
-                }
-                break;
-            case ESysInfoUserAgent:
-                {
-                HTI_LOG_TEXT( "ESysInfoUserAgent" );
-                HandleGetUserAgentStringL( aMessage );
-                }
-                break;
-            case EFreeRAM:
-                {
-                HTI_LOG_TEXT( "EFreeRAM" );
-                HandleGetFreeRamL( aMessage );
-                }
-                break;
-            case EUsedRAM:
-                {
-                HTI_LOG_TEXT( "EUsedRAM" );
-                HandleGetUsedRamL( aMessage );
-                }
-                break;
-            case ETotalRAM:
-                {
-                HTI_LOG_TEXT( "ETotalRAM" );
-                HandleGetTotalRamL( aMessage );
-                }
-                break;
-            case EEatRAM:
-                {
-                HTI_LOG_TEXT( "EEatRAM" );
-                HandleEatRamL( aMessage );
-                }
-                break;
-            case EReleaseRAM:
-                {
-                HTI_LOG_TEXT( "EReleaseRAM" );
-                HandleReleaseRamL( aMessage );
-                }
-                break;
-            case EFreeDiskSpace:
-                {
-                HTI_LOG_TEXT( "EFreeDiskSpace" );
-                HandleGetFreeDiskSpaceL( aMessage );
-                }
-                break;
-            case EUsedDiskSpace:
-                {
-                HTI_LOG_TEXT( "EUsedDiskSpace" );
-                HandleGetUsedDiskSpaceL( aMessage );
-                }
-                break;
-            case ETotalDiskSize:
-                {
-                HTI_LOG_TEXT( "ETotalDiskSize" );
-                HandleGetTotalDiskSpaceL( aMessage );
-                }
-                break;
-            case EEatDiskSpace:
-                {
-                HTI_LOG_TEXT( "EEatDiskSpace" );
-                HandleEatDiskSpaceL( aMessage );
-                }
-                break;
-            case EReleaseDiskSpace:
-                {
-                HTI_LOG_TEXT( "EReleaseDiskSpace" );
-                HandleReleaseDiskSpaceL( aMessage );
-                }
-                break;
-            case ESysInfoSetHomeTime:
-                {
-                HTI_LOG_TEXT( "ESysInfoSetHomeTime" );
-                HandleSetHomeTimeL( aMessage );
-                }
-                break;
-            case ESysInfoGetHomeTime:
-                {
-                HTI_LOG_TEXT( "ESysInfoGetHomeTime" );
-                HandleGetHomeTimeL( aMessage );
-                }
-                break;
-            case ESetDateTimeFormat:
-                {
-                HTI_LOG_TEXT( "ESetDateTimeFormat" );
-                HandleSetDateTimeFormatL( aMessage );
-                }
-                break;
-            case ESetLanguage:
-                {
-                HTI_LOG_TEXT("ESetLanguage");
-                HandleSetLanguageL( aMessage);
-                }
-                break;
-            case ELightStatus:
-            case ELightOn:
-            case ELightOff:
-            case ELightBlink:
-            case ELightRelease:
-                {
-                HTI_LOG_TEXT( "ELight*" );
-                HandleLightsCommandL( aMessage );
-                }
-                break;
-            case EScreenSaverDisable:
-            case EScreenSaverEnable:
-                {
-                HTI_LOG_TEXT( "EScreenSaver*" );
-                HandleScreenSaverCommandL( aMessage );
-                }
-                break;
-            case EScreenSaverTimeout:
-                {
-                HTI_LOG_TEXT( "EScreenSaverTimeout" );
-                HandleScreenSaverTimeoutCommandL( aMessage );
-                }
-                break;
-            case ENetworkModeSet:
-            case ENetworkModeSetNoReboot:
-            case ENetworkModeGet:
-                {
-                HTI_LOG_TEXT( "ENetworkMode*" );
-                HandleNetworkModeCommandL( aMessage );
-                }
-                break;
-            case EHsdpaSet:
-                {
-                HTI_LOG_TEXT( "EHsdpaSet" );
-                HandleHsdpaCommandL( aMessage );
-                }
-                break;
-            case EIrActivate:
-                {
-                HTI_LOG_TEXT( "EIrActivate" );
-                HandleIrActivateCommandL( aMessage );
-                }
-                break;
-            case EBtPower:
-                {
-                HTI_LOG_TEXT( "EBtPower" );
-                HandleBtPowerCommandL( aMessage );
-                }
-                break;
-            case EBtSettings:
-                {
-                HTI_LOG_TEXT( "EBtSettings" );
-                HandleBtSettingsCommandL( aMessage );
-                }
-                break;
-            case EBtDeletePairings:
-                {
-                HTI_LOG_TEXT( "EBtDeletePairings" );
-                HandleBtDeletePairingsL( aMessage );
-                }
-                break;
-            case EKeylockToggle:
-                {
-                HTI_LOG_TEXT( "EKeylockToggle" );
-                HandleKeyLockToggleL( aMessage );
-                }
-                break;
-            case EAutoKeyGuardTime:
-                {
-                HTI_LOG_TEXT( "EAutoKeyGuardTime" );
-                HandleAutoKeyGuardTimeL( aMessage );
-                }
-                break;
-            case EEmtpyDrmRightsDb:
-                {
-                HTI_LOG_TEXT( "EEmtpyDrmRightsDb" );
-                HandleEmptyDrmRightsDbL( aMessage );
-                }
-                break;
-            case EBatteryStatus:
-                {
-                HTI_LOG_TEXT( "EBatteryStatus" );
-                HandleBatteryStatusL( aMessage );
-                }
-                break;
-            case ESignalStrength:
-                {
-                HTI_LOG_TEXT( "ESignalStrength" );
-                HandleSignalStrengthL( aMessage );
-                }
-                break;
-            case EUpdateMediaGallery:
-                {
-                HTI_LOG_TEXT( "EUpdateMediaGallery" );
-                HandleUpdateMediaGalleryL( aMessage );
-                }
-                break;
-            case EActivateSkin:
-                {
-                HTI_LOG_TEXT( "EActivateSkin" );
-                HandleActivateSkinL( aMessage );
-                }
-                break;
-            default:
-                {
-                iDispatcher->DispatchOutgoingErrorMessage(
-                    KErrArgument,
-                    KErrDescrNotSupported,
-                    KSysInfoServiceUid );
-                }
-            }
-        }
-
-    else // aMessage.Length() > 0
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        }
-
-    if ( iReply )
-        {
-        TInt err = iDispatcher->DispatchOutgoingMessage( iReply,
-                                                         KSysInfoServiceUid );
-        if ( err == KErrNoMemory )
-            {
-            HTI_LOG_TEXT( "KErrNoMemory" );
-            iDispatcher->AddMemoryObserver( this );
-            }
-        else
-            {
-            iReply = NULL;
-            }
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::ProcessMessage" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::NotifyMemoryChange
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::NotifyMemoryChange( TInt aAvailableMemory )
-    {
-
-    if ( iReply )
-        {
-        if ( aAvailableMemory >= iReply->Size() )
-            {
-            TInt err = iDispatcher->DispatchOutgoingMessage(
-                iReply, KSysInfoServiceUid );
-
-            if ( err == KErrNone )
-                {
-                iReply = NULL;
-                iDispatcher->RemoveMemoryObserver( this );
-                }
-            else if ( err != KErrNoMemory ) //some other error
-                {
-                delete iReply;
-                iReply = NULL;
-                iDispatcher->RemoveMemoryObserver( this );
-                }
-            }
-        }
-    else
-        {
-        // some error, should not be called
-        iDispatcher->RemoveMemoryObserver( this );
-        }
-    }
-
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 )
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleAllowSSPropertyChange
-//------------------------------------------------------------------------------
-TInt CHtiSysInfoServicePlugin::HandleAllowSSPropertyChange( TAny* aPtr )
-    {
-    HTI_LOG_TEXT( "Allow SS property was changed" );
-    TInt newValue = -1;
-    TInt wantedValue =
-        STATIC_CAST( CHtiSysInfoServicePlugin*, aPtr )->iAllowSSValue;
-    RProperty::Get( KPSUidScreenSaver,
-                    KScreenSaverAllowScreenSaver, newValue );
-    HTI_LOG_FORMAT( "New value is %d", newValue );
-
-    TInt err = KErrNone;
-    if ( newValue == 0 && wantedValue == 1 )
-        {
-        HTI_LOG_TEXT( "Restoring the SS disabled value" );
-        err = RProperty::Set( KPSUidScreenSaver,
-                              KScreenSaverAllowScreenSaver, wantedValue );
-        }
-    return err;
-    }
-
-#endif
-/*
- * Private helper methods
- */
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetHalAttrL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetHalAttrL( const TDesC8& aMessage )
-    {
-    // check the message length
-    if ( aMessage.Length() != 5 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    TInt att =  aMessage[1] +
-              ( aMessage[2] << 8  ) +
-              ( aMessage[3] << 16 ) +
-              ( aMessage[4] << 24 );
-
-    // check that requested HAL attribute is valid
-    if ( att < 0 || att >= HALData::ENumHalAttributes )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrAttOutOfRange,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    // get the HAL attribute
-    TInt result;
-    TInt err = HAL::Get( ( HALData::TAttribute ) att, result );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrHAL,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( 4 );
-        iReply->Des().Append( ( TUint8* )( &result ), 4 );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetImeiL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetImeiL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleGetImeiL" );
-
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-#if !defined (__WINS__) // no IMEI in emulator
-    RTelServer server;
-    User::LeaveIfError( server.Connect() );
-    CleanupClosePushL( server );
-    User::LeaveIfError( server.LoadPhoneModule( KMmTsyModuleName ) );
-
-    RTelServer::TPhoneInfo info;
-    TInt ret = KErrNotSupported;
-    TInt count;
-
-    RMobilePhone mobilePhone;
-
-    User::LeaveIfError( server.EnumeratePhones( count ) );
-
-    for ( TInt i = 0; i < count; i++ )
-        {
-        ret = server.GetPhoneInfo( i, info );
-        if ( ret == KErrNone )
-            {
-            User::LeaveIfError( mobilePhone.Open( server, info.iName ) );
-            CleanupClosePushL( mobilePhone );
-            break;
-            }
-        }
-
-    TRequestStatus status;
-    RMobilePhone::TMobilePhoneIdentityV1 identity;
-
-    mobilePhone.GetPhoneId( status, identity );
-    User::WaitForRequest( status );
-
-    CleanupStack::PopAndDestroy(); // mobilePhone
-
-    server.UnloadPhoneModule( KMmTsyModuleName );
-    CleanupStack::PopAndDestroy(); // server
-
-    iReply = HBufC8::NewL( identity.iSerialNumber.Length() );
-    iReply->Des().Copy( identity.iSerialNumber );
-
-#else // __WINS__
-    // no IMEI in emulator
-    iDispatcher->DispatchOutgoingErrorMessage( KErrNotSupported,
-        KErrDescrNotSupported, KSysInfoServiceUid );
-#endif // __WINS__
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleGetImeiL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetSwVersionL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetSwVersionL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    TBuf<KSysUtilVersionTextLength> reply16;
-    TInt err = SysUtil::GetSWVersion( reply16 );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrSysUtil,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( reply16.Size() );
-        iReply->Des().Append( ( TUint8* )reply16.Ptr(), reply16.Size() );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetLangVersionL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetLangVersionL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    TBuf<KSysUtilVersionTextLength> reply16;
-    TInt err = SysUtil::GetLangVersion( reply16 );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrSysUtil,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( reply16.Size() );
-        iReply->Des().Append( ( TUint8* )reply16.Ptr(), reply16.Size() );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetSwLangVersionL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetSwLangVersionL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    TBuf<KSysUtilVersionTextLength> reply16;
-    TInt err = SysUtil::GetLangSWVersion( reply16 );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrSysUtil,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( reply16.Size() );
-        iReply->Des().Append( ( TUint8* )reply16.Ptr(), reply16.Size() );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetUserAgentStringL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetUserAgentStringL(
-        const TDesC8& aMessage )
-    {
-    aMessage.Length(); // get rid of compiler warning
-    iDispatcher->DispatchOutgoingErrorMessage(
-        KErrNotSupported,
-        KErrDescrNotSupported,
-        KSysInfoServiceUid);
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetFreeRamL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetFreeRamL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    User::CompressAllHeaps();
-    TInt result;
-    TInt err = HAL::Get( HALData::EMemoryRAMFree, result );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrFreeRAM,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( 4 );
-        iReply->Des().Append( ( TUint8* )( &result ), 4 );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetUsedRamL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetUsedRamL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    User::CompressAllHeaps();
-
-    TInt totalRam;
-    TInt freeRam;
-    TInt usedRam;
-
-    // first get the total RAM...
-    TInt err = HAL::Get( HALData::EMemoryRAM, totalRam );
-    if ( err != KErrNone )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrTotalRAM,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // ...then get the free RAM
-    err = HAL::Get( HALData::EMemoryRAMFree, freeRam );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrFreeRAM,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // calculate used RAM from total and free RAM
-    usedRam = totalRam - freeRam;
-    iReply = HBufC8::NewL( 4 );
-    iReply->Des().Append( ( TUint8* )( &usedRam ), 4 );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetTotalRamL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetTotalRamL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    User::CompressAllHeaps();
-
-    TInt result;
-    TInt err = HAL::Get( HALData::EMemoryRAM, result );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrTotalRAM,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( 4 );
-        iReply->Des().Append( ( TUint8* )( &result ), 4 );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleEatRamL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleEatRamL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 5 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // get the amount of memory to be left free from the message
-    TInt memLeftFree =  aMessage[1] +
-                      ( aMessage[2] << 8  ) +
-                      ( aMessage[3] << 16 ) +
-                      ( aMessage[4] << 24 );
-
-    // if there's a previous memory eater, delete it
-    if ( iMemEater != NULL )
-        {
-        delete iMemEater;
-        iMemEater = NULL;
-        }
-
-    User::CompressAllHeaps();
-
-    // get the current free memory
-    TInt memFree;
-    TInt err = HAL::Get( HALData::EMemoryRAMFree, memFree );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrFreeRAM,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // try to eat the memory
-    TInt memToBeEaten = memFree - memLeftFree;
-
-    if ( memToBeEaten < 0 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-                KErrUnderflow,
-                KErrDescrInvalidRAM,
-                KSysInfoServiceUid );
-        return;
-        }
-
-    TRAP( err, iMemEater = HBufC8::NewL( memToBeEaten ) );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrAllocRAM,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // get the amount of memory left
-    err = HAL::Get( HALData::EMemoryRAMFree, memFree );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrFreeRAM,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // send the amount of memory back
-    iReply = HBufC8::NewL( 4 );
-    iReply->Des().Append( ( TUint8* )( &memFree ), 4 );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleReleaseRamL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleReleaseRamL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // if there's a memory eater, delete it
-    if ( iMemEater != NULL )
-        {
-        delete iMemEater;
-        iMemEater = NULL;
-        }
-
-    User::CompressAllHeaps();
-
-    // query the amount of memory and send it back
-    TInt memFree;
-    TInt err = HAL::Get( HALData::EMemoryRAMFree, memFree );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrHAL,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( 4 );
-        iReply->Des().Append( ( TUint8* )( &memFree ), 4 );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetFreeDiskSpaceL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetFreeDiskSpaceL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    TInt drive;
-    RFs::CharToDrive( TChar( aMessage[1] ), drive );
-    TVolumeInfo volInfo;
-    TInt err = iFs.Volume( volInfo, drive );
-
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrVolInfo,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( 8 );
-        iReply->Des().Append( ( TUint8* )( &volInfo.iFree ), 8 );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetUsedDiskSpaceL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetUsedDiskSpaceL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    TInt drive;
-    RFs::CharToDrive( TChar( aMessage[1] ), drive );
-    TVolumeInfo volInfo;
-    TInt err = iFs.Volume( volInfo, drive );
-
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrVolInfo,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        TInt64 used = volInfo.iSize - volInfo.iFree;
-        iReply = HBufC8::NewL( 8 );
-        iReply->Des().Append( ( TUint8* )( &used ), 8 );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetTotalDiskSpaceL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetTotalDiskSpaceL(
-        const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    TInt drive;
-    RFs::CharToDrive( TChar( aMessage[1] ), drive );
-    TVolumeInfo volInfo;
-    TInt err = iFs.Volume( volInfo, drive );
-
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrVolInfo,
-            KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( 8 );
-        iReply->Des().Append( ( TUint8* )( &volInfo.iSize ), 8 );
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleEatDiskSpaceL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleEatDiskSpaceL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleEatDiskSpaceL" );
-    
-    if ( aMessage.Length() != 10 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleEatDiskSpaceL" );
-        return;
-        }
-
-    TFileName commonpath;
-    commonpath.Append( aMessage[1] );
-    commonpath.Append( _L( ":" ) );
-    commonpath.Append( KTempFilePath );
-    commonpath.Append( KTempFileName );
-    TFileName path;
-        
-    // get free disk space
-    TInt drive;
-    RFs::CharToDrive( TChar( aMessage[1] ), drive );
-    TVolumeInfo volInfo;
-    TInt err = iFs.Volume( volInfo, drive );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrVolInfo,
-            KSysInfoServiceUid );
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleEatDiskSpaceL" );
-        return;
-        }
-
-    // calculate how much we must eat the disk space
-    TInt64 temp1 = aMessage[2] +
-                 ( aMessage[3] << 8  ) +
-                 ( aMessage[4] << 16 ) +
-                 ( aMessage[5] << 24 );
-    TInt64 temp2 = aMessage[6] +
-                 ( aMessage[7] << 8  ) +
-                 ( aMessage[8] << 16 ) +
-                 ( aMessage[9] << 24 );
-
-    TInt64 spaceLeftFree = temp1 + ( temp2 << 32) ;
-    TInt64 spaceToEat = volInfo.iFree - spaceLeftFree;
-
-    HTI_LOG_FORMAT( "Disk space to eat: %Ld", spaceToEat );
-
-    // check that there is enough free disk space
-    if ( spaceToEat < 0 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrDiskFull,
-            KErrDescrNotEnoughSpace,
-            KSysInfoServiceUid );
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleEatDiskSpaceL" );
-        return;
-        }
-
-    // check if scaceToEat is greater than KMaxTInt
-    //  --> it must be eaten in several chunks
-    //  --> not yet supported.
-
-    TInt64 size;
-    for(TInt i=1;  spaceToEat>0; i++)
-        {
-        path.Zero();
-        path.Copy(commonpath);
-        path.AppendNum(i);
-        if ( BaflUtils::FileExists( iFs, path ) )
-            {
-            continue;
-            }
-        
-        if(spaceToEat > KMaxTInt)  
-            size=KMaxTInt;
-        else
-            size=spaceToEat;
-        
-        err = CreatFileToEatDiskSpace(path, size);
-        if(err)
-            { 
-            HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleEatDiskSpaceL CreateFile Fail" );
-            return;  
-            }        
-        
-        iFs.Volume( volInfo, drive );
-        HTI_LOG_FORMAT( "current free space: %Ld", volInfo.iFree );
-        spaceToEat = volInfo.iFree - spaceLeftFree;           
-        }
-
-    // all ok, send the remaining disk size back
-    iReply = HBufC8::NewL( 8 );
-    iReply->Des().Append( ( TUint8* )( &volInfo.iFree ), 8 );
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleEatDiskSpaceL" );
-    }
-
-TInt CHtiSysInfoServicePlugin::CreatFileToEatDiskSpace( TFileName aPath, TInt64 aSpaceToEat  )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::CreatFileToEatDiskSpace" );
-    
-    HTI_LOG_FORMAT( "Create file: %S", &aPath );
-    HTI_LOG_FORMAT( "file size %Ld", aSpaceToEat );
-    
-    // create a temp file
-    RFile diskEater;
-    TInt err = diskEater.Replace( iFs, aPath, EFileWrite );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrCreateTempFile,
-            KSysInfoServiceUid );
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::CreatFileToEatDiskSpace Replace error" );
-        return err;
-        }
-    
-    // set the size for temp file
-    err = diskEater.SetSize( I64LOW( aSpaceToEat ) );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrSetSizeTempFile,
-            KSysInfoServiceUid );
-        diskEater.Close();
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::CreatFileToEatDiskSpace SetSize error" );
-        return err;
-        }
-    diskEater.Close();
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::CreatFileToEatDiskSpace" );
-    return 0;
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleReleaseDiskSpaceL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleReleaseDiskSpaceL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleReleaseDiskSpaceL" );
-    if ( aMessage.Length() != 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleReleaseDiskSpaceL" );
-        return;
-        }
-
-    TFileName path;
-    path.Append( aMessage[1] );
-    path.Append( _L( ":" ) );
-    path.Append(KTempFilePath);
-    path.Append(KMatchFileName);
-    TInt err = iFileMan->Delete(path);
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-                err,
-                KErrDescrDeleteTempFile,
-                KSysInfoServiceUid );
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleReleaseDiskSpaceL" );
-        return;
-        } 
-    
-    // query the free disk space
-    TInt drive;
-    RFs::CharToDrive( TChar( aMessage[1] ), drive );
-    TVolumeInfo volInfo;
-    err = iFs.Volume( volInfo, drive );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrVolInfo,
-            KSysInfoServiceUid );
-        HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleReleaseDiskSpaceL" );
-        return;
-        }
-
-    // all ok, send the free disk space back
-    iReply = HBufC8::NewL( 8 );
-    iReply->Des().Append( ( TUint8* )( &volInfo.iFree ), 8 );
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleReleaseDiskSpaceL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleSetHomeTimeL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleSetHomeTimeL( const TDesC8& aMessage )
-    {
-    TTime time;
-    TRAPD( err, ParseTimeDataL( aMessage.Mid( 1 ), time ) );
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-                               KErrDescrArgument,
-                               KSysInfoServiceUid);
-        return;
-        }
-
-    // User::SetHomeTime() does not work correctly with daylight saving time
-    // in S60 3.0 - have to use time zone server instead.
-    RTz tzServer;
-    err = tzServer.Connect();
-    if ( err == KErrNone )
-        {
-        err = tzServer.SetHomeTime( time );
-        }
-    tzServer.Close();
-
-    if ( err )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-                               KErrDescrSetTime,
-                               KSysInfoServiceUid);
-        return;
-        }
-
-    iReply = HBufC8::NewL( 1 );
-    iReply->Des().Append( 0 );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleGetHomeTimeL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleGetHomeTimeL( const TDesC8& aMessage )
-    {
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-
-        return;
-        }
-
-    TTime time;
-    time.HomeTime();
-    TDateTime dateTime = time.DateTime();
-    TUint year = dateTime.Year();
-    iReply = HBufC8::NewL( KTimeDataLength );
-    iReply->Des().Append( (TUint8*)(&year), 2 );
-    iReply->Des().Append( dateTime.Month() + 1 );
-    iReply->Des().Append( dateTime.Day() + 1 );
-    iReply->Des().Append( dateTime.Hour() );
-    iReply->Des().Append( dateTime.Minute() );
-    iReply->Des().Append( dateTime.Second() );
-    }
-
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleSetDateTimeFormatL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleSetDateTimeFormatL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleSetDateTimeFormatL" );
-
-    if ( aMessage.Length() != KDateTimeFormatCmdLength )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    // Parse values from message
-    TDateFormat dateFormat = STATIC_CAST( TDateFormat, aMessage[1] );
-    TChar dateSepar = aMessage[2];
-    TTimeFormat timeFormat = STATIC_CAST( TTimeFormat, aMessage[3] );
-    TChar timeSepar = aMessage[4];
-    TClockFormat clockFormat = STATIC_CAST( TClockFormat, aMessage[5] );
-
-    HTI_LOG_FORMAT( "Date format   : %d", dateFormat );
-    HTI_LOG_FORMAT( "Date separator: %c", aMessage[2] );
-    HTI_LOG_FORMAT( "Time format   : %d", timeFormat );
-    HTI_LOG_FORMAT( "Time separator: %c", aMessage[4] );
-    HTI_LOG_FORMAT( "Clock format  : %d", clockFormat );
-
-    // Check validity of values
-    if ( dateFormat < EDateAmerican || dateFormat > EDateJapanese ||
-         timeFormat < ETime12 || timeFormat > ETime24 ||
-         clockFormat < EClockAnalog || clockFormat > EClockDigital ||
-         KDateSeparatorChars().Locate( dateSepar ) == KErrNotFound ||
-         KTimeSeparatorChars().Locate( timeSepar ) == KErrNotFound )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    // Set the values
-    TLocale locale;
-    locale.SetDateFormat( dateFormat );
-    locale.SetDateSeparator( dateSepar, 1 );
-    locale.SetDateSeparator( dateSepar, 2 );
-    locale.SetTimeFormat( timeFormat );
-    locale.SetTimeSeparator( timeSepar, 1 );
-    locale.SetTimeSeparator( timeSepar, 2 );
-    locale.SetClockFormat( clockFormat );
-    TInt err = locale.Set();
-
-    if ( err != KErrNone )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-            KErrDescrDateTimeFormat, KSysInfoServiceUid );
-        }
-    else
-        {
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 0 );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleSetDateTimeFormatL" );
-    }
-
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleLightsCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleLightsCommandL( const TDesC8& aMessage )
-    {
-    if ( aMessage[0] == ELightRelease )
-        {
-        if ( aMessage.Length() != 1 )
-            {
-            iDispatcher->DispatchOutgoingErrorMessage(
-                KErrArgument,
-                KErrDescrArgument,
-                KSysInfoServiceUid);
-            }
-
-        else
-            {
-            HTI_LOG_TEXT( "ELightRelease" );
-            delete iLightsController;
-            iLightsController = NULL;
-            iReply = HBufC8::NewL( 1 );
-            iReply->Des().Append( 0 );
-            }
-        }
-
-    else
-        {
-        if ( !iLightsController )
-            {
-            HTI_LOG_TEXT( "Creating lights controller" );
-            iLightsController = CHtiLightsController::NewL(
-                                    iDispatcher );
-            }
-        TBuf8<4> reply;
-        iLightsController->ProcessMessageL( aMessage, reply );
-        if ( reply.Length() > 0 )
-            {
-            iReply = HBufC8::NewL( reply.Length() );
-            iReply->Des().Copy( reply );
-            }
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleScreenSaverCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleScreenSaverCommandL(
-                                    const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN(
-            "CHtiSysInfoServicePlugin::HandleScreenSaverCommandL" );
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) 
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    if ( aMessage[0] == EScreenSaverDisable ) iAllowSSValue = 1;
-    else if ( aMessage[0] == EScreenSaverEnable ) iAllowSSValue = 0;
-    else User::Leave( KErrArgument );
-
-    HTI_LOG_FORMAT( "Setting allow screen saver state %d", iAllowSSValue );
-
-    TInt err = KErrNone;
-
-    if ( !iAllowSSPropertyAttached )
-        {
-        HTI_LOG_TEXT( "Attaching to KScreenSaverAllowScreenSaver property" );
-        err = iAllowSSProperty.Attach(
-                KPSUidScreenSaver, KScreenSaverAllowScreenSaver );
-
-        if ( err )
-            {
-            iDispatcher->DispatchOutgoingErrorMessage(
-                err, KErrDescrScreenSaver, KSysInfoServiceUid );
-            return;
-            }
-
-        iAllowSSPropertyAttached = ETrue;
-        }
-
-    if ( iAllowSSValue == 1 )
-        {
-        iAllowSSProperty.Set( iAllowSSValue ); // ignore error
-        // Screen saver disabled. We want to keep it disabled, so
-        // subscribe to the property to get notified about changes in it.
-        if ( !iAllowSSSubscriber )
-            {
-            iAllowSSSubscriber = new (ELeave) CHtiPropertySubscriber(
-                TCallBack( HandleAllowSSPropertyChange, this ),
-                iAllowSSProperty );
-            iAllowSSSubscriber->Subscribe();
-            }
-        }
-
-    else  // iAllowSSValue == 0
-        {
-        // Enabling screen saver. Cancel possible subscription so
-        // other applications can control the property.
-        if ( iAllowSSSubscriber )
-            {
-            iAllowSSSubscriber->Unsubscribe();
-            }
-        iAllowSSProperty.Set( iAllowSSValue ); // ignore error
-        iAllowSSProperty.Close();
-        iAllowSSPropertyAttached = EFalse;
-        delete iAllowSSSubscriber;
-        iAllowSSSubscriber = NULL;
-        }
-
-    iReply = HBufC8::NewL( 1 );
-    iReply->Des().Append( 0 );
-#else
-    iDispatcher->DispatchOutgoingErrorMessage(KErrArgument,
-            KErrDescrNotSupported, KSysInfoServiceUid);
-#endif 
-    HTI_LOG_FUNC_OUT(
-                "CHtiSysInfoServicePlugin::HandleScreenSaverCommandL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleScreenSaverTimeoutCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleScreenSaverTimeoutCommandL(
-                                    const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN(
-            "CHtiSysInfoServicePlugin::HandleScreenSaverTimeoutCommandL" );
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 )
-    if ( aMessage.Length() != 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid);
-        return;
-        }
-
-    TInt time = aMessage[1];
-    HTI_LOG_FORMAT( "Requested timeout %d", time );
-    if ( time < 5 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrInvalidSSTimeout, KSysInfoServiceUid );
-        return;
-        }
-
-    CRepository* persRep = CRepository::NewL( KCRUidPersonalizationSettings );
-    TInt err = persRep->Set( KSettingsScreenSaverPeriod, time );
-
-    if ( err == KErrNone )
-        {
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 0 );
-        }
-
-    else
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-            KErrDescrSSTimeoutFailed, KSysInfoServiceUid );
-        }
-
-    delete persRep;
-#else
-    iDispatcher->DispatchOutgoingErrorMessage(KErrArgument,
-            KErrDescrNotSupported, KSysInfoServiceUid);
-#endif 
-    HTI_LOG_FUNC_OUT(
-        "CHtiSysInfoServicePlugin::HandleScreenSaverTimeoutCommandL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleNetworkModeCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleNetworkModeCommandL( const TDesC8& aMessage )
-{
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleNetworkModeCommandL" );
-
-    TInt err = StartC32();
-    if ( ( err != KErrNone ) && ( err != KErrAlreadyExists ) )
-        {
-        HTI_LOG_FORMAT( "StartC32 failed %d", err );
-        User::Leave( err );
-        }
-
-    // Connect to telephony server
-    RTelServer telServer;
-    err = telServer.Connect();
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "RTelServer::Connect() failed %d", err );
-        User::Leave( err );
-        }
-    CleanupClosePushL( telServer );
-
-    // load phonetsy
-    err = telServer.LoadPhoneModule( KMmTsyModuleName );
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "RTelServer::LoadPhoneModule() failed %d", err );
-        User::Leave( err );
-        }
-
-    // get phones
-    TInt noOfPhones;
-    err = telServer.EnumeratePhones( noOfPhones );
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "RTelServer::EnumeratePhones() failed %d", err );
-        User::Leave( err );
-        }
-
-    if ( noOfPhones == 0 )
-        {
-        HTI_LOG_TEXT( "No phones found" );
-        User::Leave( KErrNotFound );
-        }
-
-    HTI_LOG_FORMAT( "noOfPhones %d", noOfPhones );
-
-    RTelServer::TPhoneInfo phoneInfo;
-    for ( TInt i = 0; i < noOfPhones; i++ )
-        {
-        TName phoneTsy;
-        telServer.GetTsyName( i, phoneTsy );
-        HTI_LOG_DES( phoneTsy );
-
-        err = telServer.GetPhoneInfo( i, phoneInfo );
-        if ( err != KErrNone )
-            {
-            HTI_LOG_FORMAT( "RTelServer::GetPhoneInfo() %d", i );
-            HTI_LOG_FORMAT( "failed %d", err );
-            User::Leave( err );
-            }
-        HTI_LOG_DES( phoneInfo.iName );
-        }
-
-    // open phone
-    RMobilePhone phone;
-    err = phone.Open( telServer, phoneInfo.iName );
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "RMobilePhone::Open() failed %d", err );
-        User::Leave( err );
-        }
-    CleanupClosePushL( phone );
-
-    err = phone.Initialise();
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "RMobilePhone::Initialise() failed %d", err );
-        User::Leave( err );
-        }
-
-    // Open customapi
-    RMmCustomAPI customAPI;
-    err = customAPI.Open( phone );
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "RMmCustomAPI::Open() %d", err );
-        User::LeaveIfError( err );
-        }
-    CleanupClosePushL( customAPI );
-
-    switch ( aMessage[0] )
-    {
-    case ENetworkModeGet:
-        {
-        HTI_LOG_TEXT( "ENetworkModeGet" );
-        TUint32 networkModes = 0;
-        err = customAPI.GetCurrentSystemNetworkModes( networkModes );
-        if ( err )
-            {
-            HTI_LOG_FORMAT(
-                    "RMmCustomAPI::GetCurrentSystemNetworkModes() failed %d",
-                    err );
-            User::LeaveIfError(
-                iDispatcher->DispatchOutgoingErrorMessage(
-                        err,
-                        KErrDescrGetNetworkModes,
-                        KSysInfoServiceUid ) );
-            }
-        else
-            {
-            HTI_LOG_FORMAT( "networkModes 0x%x", networkModes );
-            TBuf8<5> okMsg;
-            okMsg.Append( ENetworkModeGet );
-            okMsg.Append( (TUint8*) &networkModes, 4 );
-            iReply = okMsg.AllocL();
-            }
-        }
-        break;
-
-    case ENetworkModeSet:
-        HTI_LOG_TEXT( "ENetworkModeSet" );
-        if ( aMessage.Length() != 5 )
-            {
-            HTI_LOG_TEXT( "KErrArgument" );
-            User::LeaveIfError(
-                iDispatcher->DispatchOutgoingErrorMessage(
-                        KErrArgument,
-                        KErrDescrArgument,
-                        KSysInfoServiceUid ) );
-            }
-        else
-            {
-            TUint32 mode = aMessage[1] + ( aMessage[2] << 8 ) +
-                           ( aMessage[3] << 16 ) + ( aMessage[4] << 24 );
-
-            HTI_LOG_FORMAT( "SetSystemNetworkMode 0x%x", mode );
-            err = customAPI.SetSystemNetworkMode(
-                    ( RMmCustomAPI::TNetworkModeCaps ) mode );
-            if ( err )
-                {
-                HTI_LOG_FORMAT(
-                        "RMmCustomAPI::SetSystemNetworkMode() failed %d", err );
-                iDispatcher->DispatchOutgoingErrorMessage(
-                    err,
-                    KErrDescrSetNetworkMode,
-                    KSysInfoServiceUid );
-                }
-            else
-                {
-                iDispatcher->ShutdownAndRebootDeviceL();
-                }
-            }
-        break;
-
-    case ENetworkModeSetNoReboot:
-        {
-        HTI_LOG_TEXT( "ENetworkModeSetNoReboot" );
-        if ( aMessage.Length() != 5 )
-            {
-            HTI_LOG_TEXT( "KErrArgument" );
-            User::LeaveIfError(
-                iDispatcher->DispatchOutgoingErrorMessage(
-                        KErrArgument,
-                        KErrDescrArgument,
-                        KSysInfoServiceUid ) );
-            }
-        else
-            {
-            TUint32 mode = aMessage[1] + ( aMessage[2] << 8 ) +
-                           ( aMessage[3] << 16 ) + ( aMessage[4] << 24 );
-
-            HTI_LOG_FORMAT( "SetSystemNetworkMode 0x%x", mode );
-            err = customAPI.SetSystemNetworkMode(
-                    ( RMmCustomAPI::TNetworkModeCaps ) mode );
-            if ( err )
-                {
-                HTI_LOG_FORMAT(
-                        "RMmCustomAPI::SetSystemNetworkMode() failed %d", err );
-                iDispatcher->DispatchOutgoingErrorMessage(
-                    err,
-                    KErrDescrSetNetworkMode,
-                    KSysInfoServiceUid );
-                }
-            else
-                {
-                iReply = HBufC8::NewL( 1 );
-                iReply->Des().Append( 0 );
-                }
-            }
-        break;
-        }
-
-    default:
-        break;
-    }
-
-    CleanupStack::PopAndDestroy( 3 ); // telServer, phone, customAPI
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleNetworkModeCommandL" );
-}
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleIrActivateCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleIrActivateCommandL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleIrActivateCommandL" );
-
-    // Message validation
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    TInt irStatus = -1;
-    TInt err = RProperty::Get( KIrdaPropertyCategory, KIrdaStatus, irStatus );
-    if ( err != KErrNone || irStatus < TIrdaStatusCodes::EIrLoaded
-                         || irStatus > TIrdaStatusCodes::EIrDisconnected )
-        {
-        // values from irinternalpskey.h
-        err = RProperty::Set( KPSUidIrdaActivation, 1, 1 );
-        if ( err != KErrNone )
-            {
-            iDispatcher->DispatchOutgoingErrorMessage(
-                err, KErrDescrIrActivation, KSysInfoServiceUid );
-            }
-        else
-            {
-            // Activation OK
-            iReply = HBufC8::NewL( 1 );
-            iReply->Des().Append( 0 );
-            }
-        }
-    else
-        {
-        // Already active - just send a message
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 1 );
-        }
-
-     HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleIrActivateCommandL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleBtPowerCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleBtPowerCommandL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleBtPowerCommandL" );
-
-    // Message validation
-    if ( aMessage.Length() != 3 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    TInt err = KErrNone;
-    TBool setBtOn = aMessage[1];
-    TBool useForce = aMessage[2];
-    TBool isBtOn = EFalse;
-
-    TBTPowerStateValue powerState = EBTPowerOff;
-    CBTEngSettings* btSettings = CBTEngSettings::NewLC();
-    err = btSettings->GetPowerState( powerState );
-    if ( err == KErrNone && powerState == EBTPowerOn )
-        {
-        isBtOn = ETrue;
-        }
-
-    if ( err )
-        {
-        HTI_LOG_FORMAT( "GetPowerState error %d", err );
-        CleanupStack::PopAndDestroy(); // btSettings
-        iDispatcher->DispatchOutgoingErrorMessage( err, KErrDescrGetBtPower,
-                                                   KSysInfoServiceUid );
-        return;
-        }
-    HTI_LOG_FORMAT( "Current BT power state %d", isBtOn );
-    HTI_LOG_FORMAT( "Requested BT power state %d", setBtOn );
-
-    if ( setBtOn == isBtOn )
-        {
-        // Already in requested state - just send message
-        CleanupStack::PopAndDestroy(); // btSettings
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 1 );
-        }
-
-    else
-        {
-        if ( setBtOn && !CanTurnBluetoothOnL( useForce ) )
-            {
-            iDispatcher->DispatchOutgoingErrorMessage( KErrAccessDenied,
-                KErrDescrBtOnDenied, KSysInfoServiceUid );
-            return;
-            }
-
-
-        if ( !setBtOn )
-            {
-            // If we are setting BT off, do checks for active connections.
-            TInt connCount = 0;
-            // Ignore error.
-            // If we cannot query, we act like there's no active connections.
-            RProperty::Get( KPropertyUidBluetoothCategory,
-                            KPropertyKeyBluetoothGetPHYCount,
-                            connCount );
-            // Check if there's Bluetooth audio accessory connected
-            TBool isBtAacConnected = EFalse;
-
-            // If there are connections, force flag is required in the
-            // command to turn BT off.
-            if ( ( connCount || isBtAacConnected ) && !useForce )
-                {
-                iDispatcher->DispatchOutgoingErrorMessage( KErrInUse,
-                    KErrDescrBtOffDenied, KSysInfoServiceUid );
-                CleanupStack::PopAndDestroy(); // btMcm/btSettings
-                return;
-                }
-            }
-
-        if ( setBtOn )
-            {
-            err = btSettings->SetPowerState( EBTPowerOn );
-            }
-        else
-            {
-            err = btSettings->SetPowerState( EBTPowerOff );
-            }
-
-        if ( err != KErrNone )
-            {
-            HTI_LOG_FORMAT( "CBTMCMSettings::SetPowerState error %d", err );
-            iDispatcher->DispatchOutgoingErrorMessage( err, KErrDescrSetBtPower,
-                                                       KSysInfoServiceUid );
-            }
-        else
-            {
-            iReply = HBufC8::NewL( 1 );
-            iReply->Des().Append( 0 );
-            }
-        CleanupStack::PopAndDestroy(); // btSettings
-        }
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleBtPowerCommandL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleBtSettingsCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleBtSettingsCommandL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleBtSettingsCommandL" );
-
-    // Message validation
-    if ( aMessage.Length() < 4 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-    }
-    TInt btNameLength = aMessage[3];
-    if ( btNameLength > KMaxBtNameLength ||
-         aMessage.Length() != ( btNameLength + 4 ) )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    TBTVisibilityMode visibilityMode = EBTVisibilityModeGeneral;
-    if ( aMessage[1] == 0 )
-        {
-        visibilityMode = EBTVisibilityModeHidden;
-        }
-    HTI_LOG_FORMAT( "Visibility mode = %d", visibilityMode );
-
-    TInt sapMode = 1;  // EBTSapEnabled
-    if ( aMessage[2] == 0 )
-        {
-        sapMode = 0;   // EBTSapDisabled
-        }
-    HTI_LOG_FORMAT( "SAP mode = %d", sapMode );
-
-    TBuf<KMaxBtNameLength> btName;
-    if ( btNameLength > 0 )
-        {
-        btName.Copy( aMessage.Mid( 4, btNameLength ) );
-        }
-    HTI_LOG_FORMAT( "BT name = %S", &btName );
-
-    TInt err = KErrNone;
-    CBTEngSettings* btSettings = CBTEngSettings::NewLC();
-    HTI_LOG_TEXT( "CBTEngSettings::NewLC done" );
-
-    HTI_LOG_TEXT( "Setting visibility mode" );
-    err = btSettings->SetVisibilityMode( visibilityMode );
-    if ( err == KErrNone )
-        {
-        HTI_LOG_TEXT( "Setting SAP mode" );
-        // CenRep UID and key value from btengprivatecrkeys.h
-        // const TUid KCRUidBTEngPrivateSettings = { 0x10204DAC }
-        // const TUint32 KBTSapEnabled  = 0x00000003
-        CRepository* btEngRep = CRepository::NewL( TUid::Uid( 0x10204DAC ) );
-        err = btEngRep->Set( 0x00000003, sapMode );
-        delete btEngRep;
-        btEngRep = NULL;
-        }
-    if ( err == KErrNone && btName.Length() > 0 )
-        {
-        HTI_LOG_TEXT( "Setting BT name" );
-        err = btSettings->SetLocalName( btName );
-        }
-
-    if ( err == KErrNone )
-        {
-        HTI_LOG_TEXT( "All set successfully" );
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 0 );
-        }
-    else
-        {
-        HTI_LOG_FORMAT( "Error %d", err );
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrBtSettings,
-            KSysInfoServiceUid );
-        }
-
-    CleanupStack::PopAndDestroy(); // btSettings
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleBtSettingsCommandL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleBtDeletePairingsL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleBtDeletePairingsL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleBtDeletePairingsL" );
-
-    // Message validation
-    if ( aMessage.Length() < 3 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    TInt btNameLength = aMessage[2];
-    if ( btNameLength > KMaxBluetoothNameLen ||
-         aMessage.Length() != ( btNameLength + 3 ) )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage(
-            KErrArgument,
-            KErrDescrArgument,
-            KSysInfoServiceUid );
-        return;
-        }
-
-    // Message parsing
-    TBool closeConnections = aMessage[1];
-    HTI_LOG_FORMAT( "Close connections = %d", closeConnections );
-    TBTDeviceName8 btName8;
-    if ( btNameLength > 0 )
-        {
-        btName8.Copy( aMessage.Mid( 3, btNameLength ) );
-        }
-    HTI_LOG_FORMAT( "BT name = %S",
-        &( BTDeviceNameConverter::ToUnicodeL( btName8 ) ) );
-
-    // Action
-    TInt deleteCount = 0;
-    TInt err = KErrNone;
-    RBTRegServ regServ;
-    RBTRegistry registry;
-    User::LeaveIfError( regServ.Connect() );
-    CleanupClosePushL( regServ );
-    User::LeaveIfError( registry.Open( regServ ) );
-    CleanupClosePushL( registry );
-    TBTRegistrySearch searchPattern;
-    searchPattern.FindBonded();
-
-    TRequestStatus status;
-    registry.CreateView( searchPattern, status );
-    User::WaitForRequest( status );
-    err = status.Int();
-    HTI_LOG_FORMAT( "RBTRegistry::CreateView returned %d", err );
-
-    if ( err > 0 )
-        {
-        CBTRegistryResponse* response = CBTRegistryResponse::NewL( registry );
-        CleanupStack::PushL( response );
-        HTI_LOG_TEXT( "Creating AsyncWaiter" );
-        CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-        HTI_LOG_TEXT( "Calling response->Start()" );
-        response->Start( waiter->iStatus );
-        HTI_LOG_TEXT( "Calling waiter->StartAndWait()" );
-        waiter->StartAndWait();
-        err = waiter->Result();
-        CleanupStack::PopAndDestroy( waiter );
-
-        if ( err == KErrNone )
-            {
-            RBTDeviceArray results = response->Results();
-            TInt count = results.Count();
-            for ( TInt i = 0; i < count; i++ )
-                {
-                HTI_LOG_FORMAT( "Device %d", i + 1 );
-                CBTDevice* device = results[i];
-                if ( btNameLength == 0 ||
-                     device->DeviceName().Match( btName8 ) != KErrNotFound )
-                    {
-                    HTI_LOG_TEXT( "Name qualifies for deletion" );
-                    registry.UnpairDevice( device->BDAddr(), status );
-                    User::WaitForRequest( status );
-                    err = status.Int();
-                    if ( err == KErrNone )
-                        {
-                        deleteCount++; // one deletion successfully done
-                        }
-                    }
-                if ( err != KErrNone )
-                    {
-                    // Break out if any failure occurs - the command has not
-                    // been able to do what it is expected to do.
-                    break;
-                    }
-                }
-            }
-        CleanupStack::PopAndDestroy( response );
-        }
-
-    CleanupStack::PopAndDestroy( &registry );
-    CleanupStack::PopAndDestroy( &regServ );
-
-    // Create OK response or send error
-    if ( err == KErrNone )
-        {
-        HTI_LOG_FORMAT( "%d pairings deleted successfully", deleteCount );
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( deleteCount );
-        }
-    else
-        {
-        HTI_LOG_FORMAT( "Error %d", err );
-        iDispatcher->DispatchOutgoingErrorMessage(
-            err,
-            KErrDescrBtDeletePairings,
-            KSysInfoServiceUid );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleBtDeletePairingsL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleKeyLockToggleL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleKeyLockToggleL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleKeyLockToggleL" );
-#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) 
-    if ( aMessage.Length() != 3 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    RAknKeyLock keyLock;
-    User::LeaveIfError( keyLock.Connect() );
-    HTI_LOG_TEXT( "RAknKeyLock connect OK" );
-
-    TBool isKeyLockOn = keyLock.IsKeyLockEnabled();
-    HTI_LOG_FORMAT( "Keylock status = %d", isKeyLockOn );
-
-    TBool requested = aMessage[1];
-    HTI_LOG_FORMAT( "Requested status = %d", requested );
-
-    if ( requested == isKeyLockOn )
-        {
-        // Already in requested state - just send message
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 1 );
-        }
-
-    else
-        {
-        TBool showNote = aMessage[2];
-        HTI_LOG_FORMAT( "Note request = %d", showNote );
-        if ( requested )
-            {
-            if ( showNote )
-                {
-                keyLock.EnableKeyLock();
-                }
-            else
-                {
-                keyLock.EnableWithoutNote();
-                }
-            }
-        else
-            {
-            if ( showNote )
-                {
-                keyLock.DisableKeyLock();
-                }
-            else
-                {
-                keyLock.DisableWithoutNote();
-                }
-            }
-        User::After( 500000 );
-        isKeyLockOn = keyLock.IsKeyLockEnabled();
-        HTI_LOG_FORMAT( "New keylock status = %d", isKeyLockOn );
-        if ( isKeyLockOn == requested )
-            {
-            iReply = HBufC8::NewL( 1 );
-            iReply->Des().Append( 0 );
-            }
-        else
-            {
-            iDispatcher->DispatchOutgoingErrorMessage( KErrGeneral,
-                KErrDescrKeyLock, KSysInfoServiceUid );
-            }
-        }
-
-    keyLock.Close();
-#else
-    iDispatcher->DispatchOutgoingErrorMessage(KErrArgument,
-            KErrDescrNotSupported, KSysInfoServiceUid);
-#endif    
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleKeyLockToggleL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleAutoKeyGuardTimeL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleAutoKeyGuardTimeL( const TDesC8& aMessage )
-    {
-
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleAutoKeyGuardTimeL" );
-
-    if ( aMessage.Length() != 3 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    TInt time = aMessage[1] + ( aMessage[2] << 8 );
-    HTI_LOG_FORMAT( "Requested auto key guard time %d", time );
-    if ( time > 3600 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrInvalidTime, KSysInfoServiceUid );
-        return;
-        }
-
-    CRepository* secRep = CRepository::NewL( KCRUidSecuritySettings );
-    TInt err = secRep->Set( KSettingsAutomaticKeyguardTime, time );
-
-    if ( err == KErrNone )
-        {
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 0 );
-        }
-
-    else
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-            KErrDescrAutoKeyGuardFailed, KSysInfoServiceUid );
-        }
-
-    delete secRep;
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleAutoKeyGuardTimeL" );
-    }
-
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleEmptyDrmRightsDbL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleEmptyDrmRightsDbL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleEmptyDrmRightsDbL" );
-
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    RDRMRightsClient rightsClient;
-    TInt err = rightsClient.Connect();
-
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "RDRMRightsClient connect failed %d", err );
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-            KErrDescrDrmDbConnect, KSysInfoServiceUid );
-        }
-
-    else
-        {
-        HTI_LOG_TEXT( "RDRMRightsClient connect OK, clearing DB..." );
-        err = rightsClient.DeleteAll();
-        if ( err == KErrNone )
-            {
-            HTI_LOG_TEXT( "DB cleared OK" );
-            iReply = HBufC8::NewL( 1 );
-            iReply->Des().Append( 0 );
-            }
-        else
-            {
-            HTI_LOG_FORMAT( "DB clear failed %d", err );
-            iDispatcher->DispatchOutgoingErrorMessage( err,
-                KErrDescrDrmDbDelete, KSysInfoServiceUid );
-            }
-        rightsClient.Close();
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleEmptyDrmRightsDbL" );
-    }
-
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleBatteryStatusL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleBatteryStatusL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleBatteryStatusL" );
-
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    TInt err = KErrNone;
-    TInt batteryLevel = EBatteryLevelUnknown;
-    TInt chargingStatus = EChargingStatusError;
-
-    err = RProperty::Get( KPSUidHWRMPowerState,
-                          KHWRMBatteryLevel, batteryLevel );
-    HTI_LOG_FORMAT( "Battery level = %d", batteryLevel );
-    if ( err != KErrNone || batteryLevel == EBatteryLevelUnknown )
-        {
-        if ( err == KErrNone ) err = KErrGeneral;
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-            KErrDescrBatteryLevel, KSysInfoServiceUid );
-        return;
-        }
-
-    err = RProperty::Get( KPSUidHWRMPowerState,
-                          KHWRMChargingStatus, chargingStatus );
-    HTI_LOG_FORMAT( "Charging status = %d", chargingStatus );
-    if ( err != KErrNone || chargingStatus == EChargingStatusError )
-        {
-        if ( err == KErrNone ) err = KErrGeneral;
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-            KErrDescrChargingStatus, KSysInfoServiceUid );
-        return;
-        }
-
-    iReply = HBufC8::NewL( 2 );
-    iReply->Des().Append( batteryLevel );
-    iReply->Des().Append( chargingStatus );
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleBatteryStatusL" );
-    }
-
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleSignalStrengthL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleSignalStrengthL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleSignalStrengthL" );
-
-    if ( aMessage.Length() != 1 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-#if defined(__WINS__)
-    iDispatcher->DispatchOutgoingErrorMessage( KErrNotSupported,
-        KErrDescrNotSupported, KSysInfoServiceUid );
-#else
-    TInt err = KErrNone;
-    TInt popCount = 0;
-    RTelServer server;
-    err = server.Connect();
-
-    if ( err == KErrNone )
-        {
-        HTI_LOG_TEXT( "Connected to RTelServer" );
-        CleanupClosePushL( server );
-        popCount++;
-        err = server.LoadPhoneModule( KMmTsyModuleName );
-        if ( err == KErrAlreadyExists ) err = KErrNone; // ok if already loaded
-        }
-
-    RMobilePhone mobilePhone;
-
-    if ( err == KErrNone )
-        {
-        HTI_LOG_TEXT( "Phone module loaded" );
-        err = mobilePhone.Open( server, KMmTsyPhoneName );
-        }
-
-    TInt8  signalBars;
-    TInt32 signalStrength;
-
-    if ( err == KErrNone )
-        {
-        HTI_LOG_TEXT( "RMobilePhone open" );
-        CleanupClosePushL( mobilePhone );
-        popCount++;
-        TRequestStatus status;
-        mobilePhone.GetSignalStrength( status, signalStrength, signalBars );
-        User::WaitForRequest( status );
-        HTI_LOG_FORMAT( "GetSignalStrength return value %d", status.Int() );
-        err = status.Int();
-        }
-
-    if ( err == KErrNone )
-        {
-        HTI_LOG_FORMAT( "Signal bars = %d", signalBars );
-        HTI_LOG_FORMAT( "Signal strength = %d", signalStrength );
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( signalBars );
-        }
-
-    else
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( err,
-            KErrDescrSignalStrength, KSysInfoServiceUid );
-        }
-
-    if ( popCount > 0 )
-        {
-        CleanupStack::PopAndDestroy( popCount );
-        }
-#endif // __WINS__
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleSignalStrengthL" );
-    }
-
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleHsdpaCommandL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleHsdpaCommandL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleHsdpaCommandL" );
-
-    if ( aMessage.Length() != 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-    TBool enableHsdpa = aMessage[1];
-
-    RTelServer telServer;
-    RMmCustomAPI customAPI;
-    RMobilePhone mobilePhone;
-    User::LeaveIfError( telServer.Connect() );
-    CleanupClosePushL( telServer );
-    User::LeaveIfError( mobilePhone.Open( telServer, KMmTsyPhoneName ) );
-    CleanupClosePushL( mobilePhone );
-    User::LeaveIfError( customAPI.Open( mobilePhone ) );
-    CleanupClosePushL( customAPI );
-
-    // Get current HSDPA status
-    TBool isHsdpaEnabled = EFalse;
-    TRequestStatus status;
-    RMmCustomAPI::THSxPAStatus hSxPAStatus;
-    customAPI.ReadHSxPAStatus( status, hSxPAStatus );
-    User::WaitForRequest( status );
-    HTI_LOG_FORMAT( "Reading HSxPA status returned %d", status.Int() );
-    User::LeaveIfError( status.Int() );
-    if ( hSxPAStatus == RMmCustomAPI::EHSxPAEnabled )
-        {
-        isHsdpaEnabled = ETrue;
-        }
-
-    HTI_LOG_FORMAT( "Current HSDPA status   = %d", isHsdpaEnabled );
-    HTI_LOG_FORMAT( "Requested HSDPA status = %d", enableHsdpa );
-
-    if ( isHsdpaEnabled == enableHsdpa )
-        {
-        // Already in requested state - just send message
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 1 );
-        }
-
-    else
-        {
-        // Try to change status
-        if ( enableHsdpa )
-            {
-            hSxPAStatus = RMmCustomAPI::EHSxPAEnabled;
-            }
-        else
-            {
-            hSxPAStatus = RMmCustomAPI::EHSxPADisabled;
-            }
-        customAPI.WriteHSxPAStatus( status, hSxPAStatus );
-        User::WaitForRequest( status );
-        HTI_LOG_FORMAT( "Writing HSxPA status returned %d", status.Int() );
-        User::LeaveIfError( status.Int() );
-        iReply = HBufC8::NewL( 1 );
-        iReply->Des().Append( 0 );
-        }
-
-    CleanupStack::PopAndDestroy( 3 ); // mobilePhone, customAPI, telServer
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleHsdpaCommandL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleUpdateMediaGalleryL()
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleUpdateMediaGalleryL(
-        const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleUpdateMediaGalleryL" );
-
-    if ( !iGalleryUpdateSupported )
-        {
-        HTI_LOG_TEXT( "Media Gallery update not supported" );
-        iDispatcher->DispatchOutgoingErrorMessage( KErrNotSupported,
-                KErrDescrNotSupported, KSysInfoServiceUid );
-        return;
-        }
-
-    if ( aMessage.Length() < 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-            KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-    TInt filePathLength = aMessage[1];
-    // Check that given file path length is valid: Index 0 is the
-    // command code, index 1 is the path length -> hence the + 2
-    if ( aMessage.Length() != filePathLength + 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-                KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    // Try to load the Media File API DLL
-    TInt err = KErrNone;
-    RLibrary galleryUpdaterDLL;
-    err = galleryUpdaterDLL.Load( _L( "MGXMediaFileAPI.dll" ) );
-    if ( err == KErrNotFound )  // DLL does not exist
-        {
-        HTI_LOG_TEXT( "MGXMediaFileAPI.dll file not found" );
-        iGalleryUpdateSupported = EFalse;
-        iDispatcher->DispatchOutgoingErrorMessage( KErrNotSupported,
-                KErrDescrNotSupported, KSysInfoServiceUid );
-        return;
-        }
-    User::LeaveIfError( err ); // Some other error in loading the DLL
-
-    // DLL loaded successfully
-    CleanupClosePushL( galleryUpdaterDLL );
-
-    // Construct the CMGXFileManager object from the DLL
-    typedef CMGXFileManager* ( *TNewFileManagerFunc )( RFs& aFs );
-    TNewFileManagerFunc newFileManFunc =
-            ( TNewFileManagerFunc ) galleryUpdaterDLL.Lookup( 1 );
-    if ( newFileManFunc == NULL )
-        {
-        HTI_LOG_TEXT( "Function not found from DLL" );
-        iGalleryUpdateSupported = EFalse;
-        User::Leave( KErrNotSupported );
-        }
-
-    CMGXFileManager* mgManager = NULL;
-    TRAP( err, mgManager = newFileManFunc( iFs ) );
-    HTI_LOG_FORMAT( "NewFileManagerL returned %d", err );
-    User::LeaveIfError( err );
-    User::LeaveIfNull( mgManager );
-    CleanupStack::PushL( mgManager );
-
-    if ( filePathLength > 0 )
-        {
-        TBuf<KMaxFileName> path;
-        path.Copy( aMessage.Mid( 2 ) );
-        HTI_LOG_FORMAT( "Updating file %S to gallery", &path );
-        TRAP( err, mgManager->UpdateL( path ) );
-        }
-    else
-        {
-        HTI_LOG_TEXT( "Updating all files to gallery" );
-        TRAP( err, mgManager->UpdateL() );
-        }
-
-    if ( err != KErrNone )
-        {
-        HTI_LOG_FORMAT( "Gallery update failed with %d", err );
-        iDispatcher->DispatchOutgoingErrorMessage( err, KErrDescrMGUpdate,
-                KSysInfoServiceUid );
-        }
-
-    CleanupStack::PopAndDestroy( 2 ); // mgManager, galleryUpdaterDLL
-    iReply = HBufC8::NewL( 1 );
-    iReply->Des().Append( 0 );
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleUpdateMediaGalleryL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleActivateSkinL()
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleActivateSkinL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleActivateSkinL" );
-
-    // Must be at least command code + name length byte
-    if ( aMessage.Length() < 2 || aMessage.Length() != aMessage[1] + 2 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-                KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-
-    TFileName skinName;
-    if ( aMessage[1] > 0 )
-        {
-        skinName.Copy( aMessage.Mid( 2 ) );
-        }
-    HTI_LOG_FORMAT( "Skin name: %S", &skinName );
-
-    // Check if we got full path to skn file
-    TParse fileParse;
-    fileParse.Set( skinName, NULL, NULL );
-    TBool isFullPath = fileParse.DrivePresent() && fileParse.PathPresent() &&
-            fileParse.NamePresent() && fileParse.ExtPresent();
-    HTI_LOG_FORMAT( "Is full path = %d", isFullPath );
-
-    // Check current skin
-    TAknsPkgIDBuf pidBuf;
-    TInt currentSkinLocation; // TAknSkinSrvSkinPackageLocation
-    CRepository* repository =
-            CRepository::NewL( KCRUidPersonalisation );
-    CleanupStack::PushL( repository );
-    repository->Get( KPslnActiveSkinUid, pidBuf );
-    repository->Get( KPslnActiveSkinLocation, currentSkinLocation );
-    TAknsPkgID currentSkinPid;
-    currentSkinPid.SetFromDesL( pidBuf );
-    HTI_LOG_FORMAT( "Current skin pkg ID buf = %S", &pidBuf );
-    HTI_LOG_FORMAT( "Current skin location = %d", currentSkinLocation );
-
-    // Connect to the skins server
-    RAknsSrvSession skinsSession;
-    User::LeaveIfError( skinsSession.Connect() );
-    CleanupClosePushL( skinsSession );
-
-    // Resolve the ID for the requested skin
-    TAknsPkgID requestedSkinPid = KAknsNullPkgID;
-    TInt requestedSkinLocation = EAknsSrvPhone;
-
-    if ( skinName.Length() == 0 )
-        {
-        // Default skin requested - resolve default skin ID
-        // Use KAknsPIDS60DefaultSkin if nothing else found from CenRep
-        requestedSkinPid.Set( KAknsPIDS60DefaultSkin );
-        TAknsPkgID defaultSkin = KAknsNullPkgID;
-        TAknsPkgIDBuf defaultPidBuf;
-        TInt ret = repository->Get( KPslnDefaultSkinUID, defaultPidBuf );
-        if ( ret != KErrNone || defaultPidBuf.Length() == 0 )
-            {
-            HTI_LOG_TEXT( "KPslnDefaultSkinUID not found" );
-            TInt defaultID = 0;
-            ret = repository->Get( KPslnDefaultSkinID, defaultID );
-            if ( ret == KErrNone && defaultID != 0 )
-                {
-                HTI_LOG_FORMAT( "KPslnDefaultSkinID found: %d", defaultID );
-                defaultSkin.Set( TUid::Uid( defaultID ) );
-                }
-            }
-        else
-            {
-            HTI_LOG_FORMAT( "KPslnDefaultSkinUID found: %S", &defaultPidBuf );
-            TLex lexer( defaultPidBuf );
-            TPtrC pidToken( lexer.NextToken() );
-            TUint pid = 0;
-            TUint timeStamp = 0;
-            // as hex UID is 8 characters
-            // as decimal UID is 9 or 10 characters
-            if ( pidToken.Length() == 8 )
-                {
-                ret = TLex( pidToken ).Val( pid, EHex ); // value is in hex
-                }
-            else
-                {
-                ret = TLex( pidToken ).Val( pid ); // value is in decimal
-                }
-            if ( ret == KErrNone )
-                {
-                TPtrC stampToken( lexer.NextToken() );
-                // Timestamp doesn't exist if PID is an UID
-                if ( stampToken.Length() )
-                    {
-                    if ( stampToken.Length() == 8 )
-                        {
-                        // value is in hex
-                        ret = TLex( stampToken ).Val( timeStamp, EHex );
-                        }
-                    else
-                        {
-                        // value is decimal
-                        ret = TLex( stampToken ).Val( timeStamp );
-                        }
-                    }
-                }
-            if ( ret == KErrNone )
-                {
-                // We have found some valid values.
-                // Timestamp is 0 if pid is UID value
-                HTI_LOG_FORMAT( "PID %d", pid );
-                HTI_LOG_FORMAT( "Timestamp %d", timeStamp );
-                defaultSkin.Set( timeStamp, pid );
-                }
-            }
-        // Did we find something from CenRep
-        if ( defaultSkin != KAknsNullPkgID )
-            {
-            requestedSkinPid.Set( defaultSkin );
-            }
-        }
-
-    else
-        {
-        // We have skin name - try to find it
-        CArrayPtr<CAknsSrvSkinInformationPkg>* skinInfoArray =
-                skinsSession.EnumerateSkinPackagesL( EAknsSrvAll );
-        HTI_LOG_FORMAT( "Skins found: %d", skinInfoArray->Count() );
-        TInt i = 0;
-        for ( ; i < skinInfoArray->Count(); i++ )
-            {
-            if ( isFullPath )
-                {
-                if ( skinName.CompareF(
-                        skinInfoArray->At( i )->FullName() ) == 0 )
-                    {
-                    requestedSkinPid = skinInfoArray->At( i )->PID();
-                    }
-                }
-            else
-                {
-                if ( skinName.CompareF( skinInfoArray->At( i )->Name() ) == 0 )
-                    {
-                    requestedSkinPid = skinInfoArray->At( i )->PID();
-                    }
-                }
-            if ( requestedSkinPid != KAknsNullPkgID )
-                {
-                // Requested skin was found - check the location
-                TUint16 drive = ( skinInfoArray->At( i )->Directory() )[0];
-                if (  drive == 'E' || drive == 'e' )
-                    {
-                    requestedSkinLocation = EAknsSrvMMC;
-                    }
-                else
-                    {
-                    requestedSkinLocation = EAknsSrvPhone;
-                    }
-                break;
-                }
-            }
-        skinInfoArray->ResetAndDestroy(); // not needed anymore
-        delete skinInfoArray;
-        skinInfoArray = NULL;
-        }
-
-    if ( requestedSkinPid != KAknsNullPkgID )
-        {
-        // Do we need to change skin
-        if ( requestedSkinPid != currentSkinPid )
-            {
-            HTI_LOG_FORMAT( "Activating skin %d", requestedSkinPid.iNumber );
-            TInt err = skinsSession.SetAllDefinitionSets( requestedSkinPid );
-            HTI_LOG_FORMAT( "Activation returned %d", err );
-            if ( err == KErrNone )
-                {
-                TAknsPkgIDBuf newPidBuf;
-                requestedSkinPid.CopyToDes( newPidBuf );
-                err = repository->Set( KPslnActiveSkinUid, newPidBuf );
-                HTI_LOG_FORMAT( "Set KPslnActiveSkinUid returned %d", err );
-                if ( err == KErrNone &&
-                        requestedSkinLocation != currentSkinLocation )
-                    {
-                    err = repository->Set(
-                            KPslnActiveSkinLocation, requestedSkinLocation );
-                    HTI_LOG_FORMAT( "Set KPslnActiveSkinLocation returned %d",
-                            err );
-                    }
-                if ( err == KErrNone )
-                    {
-                    // Send OK message
-                    iReply = HBufC8::NewL( 1 );
-                    iReply->Des().Append( 0 ); // 0 means OK
-                    }
-                }
-            if ( err != KErrNone )
-                {
-                HTI_LOG_FORMAT( "Skin activation failed with %d", err );
-                iDispatcher->DispatchOutgoingErrorMessage( err,
-                        KErrDescrActivateSkin, KSysInfoServiceUid );
-                }
-            }
-        else
-            {
-            // Requested skin already active - just send message
-            HTI_LOG_TEXT( "Already active - no need to change" );
-            iReply = HBufC8::NewL( 1 );
-            iReply->Des().Append( 1 );  // 1 means "already active"
-            }
-        }
-
-    else
-        {
-        // Skin was not found
-        HTI_LOG_TEXT( "Skin was not found" );
-        iDispatcher->DispatchOutgoingErrorMessage( KErrNotFound,
-                KErrDescrActivateSkin, KSysInfoServiceUid );
-        }
-
-    CleanupStack::PopAndDestroy( 2 ); // skinsSession, repository
-
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleActivateSkinL" );
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::HandleSetLanguageL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::HandleSetLanguageL( const TDesC8& aMessage )
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::HandleSetLanguageL" );
-    if ( aMessage.Length() != 3 )
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-                KErrDescrArgument, KSysInfoServiceUid );
-        return;
-        }
-    
-    TInt language = aMessage[1] + ( aMessage[2] << 8 );
-    if(language < 0)
-        {
-        iDispatcher->DispatchOutgoingErrorMessage( KErrArgument,
-                KErrDescrSetLanguage, KSysInfoServiceUid );
-        return;
-        }
-    HTI_LOG_FORMAT( "Set language to %d", language );
-    
-    // Never set Language code 0 to HAL
-    if (language != 0)
-        {
-        User::LeaveIfError(HAL::Set(HAL::ELanguageIndex, language));
-        }
-    
-    CRepository* commonEngineRepository = CRepository::NewL(
-            KCRUidCommonEngineKeys);
-    CleanupStack::PushL(commonEngineRepository);
-    
-    User::LeaveIfError(commonEngineRepository->Set(KGSDisplayTxtLang, language));
-
-    CleanupStack::PopAndDestroy();
-
-    TBool nbrModeSaved = EFalse;
-    if (language == ELangArabic || User::Language() == ELangArabic)
-        {
-        //numberMode = EGSNumberModeArabicIndic;
-        SetDefaultNumberModeL(EGSNbrModeArabic, EGSNbrModeTypeArabic);
-        nbrModeSaved = ETrue;
-        }
-    else if ((language == ELangUrdu || User::Language() == ELangUrdu)
-            || (language == ELangFarsi || User::Language() == ELangFarsi))
-        {
-        //numberMode = EGSNumberModeEasternArabicIndic;
-        SetDefaultNumberModeL(EGSNbrModeLatin, EGSNbrModeTypeEasternArabic);
-        nbrModeSaved = ETrue;
-        }
-    else if (language == ELangHindi || User::Language() == ELangHindi
-            || language == ELangMarathi || User::Language() == ELangMarathi)
-        {
-        //numberMode = EGSNumberModeIndic;
-        SetDefaultNumberModeL(EGSNbrModeLatin, EGSNbrModeTypeIndic);
-        nbrModeSaved = ETrue;
-        }
-
-    //if number mode is not set above, then set it to Latin with respective
-    //number mode types. This part might be executed when Automatic is
-    //selected and the SIM card does not support the language.
-    if (!nbrModeSaved)
-        {
-        TInt nbrModeType = EGSNbrModeTypeIndic;
-        if (language == ELangArabic || User::Language() == ELangArabic)
-            {
-            nbrModeType = EGSNbrModeTypeArabic;
-            }
-        else if ((language == ELangUrdu || User::Language() == ELangUrdu)
-                || (language == ELangFarsi || User::Language() == ELangFarsi))
-            {
-            nbrModeType = EGSNbrModeTypeEasternArabic;
-            }
-
-        //EGSNumberModeLatin is true in both cases;
-        SetDefaultNumberModeL(EGSNbrModeLatin, nbrModeType);
-        }
-    
-    // Change input language
-    CRepository* aknFepRepository = CRepository::NewL( KCRUidAknFep );
-    CleanupStack::PushL(aknFepRepository);
-    User::LeaveIfError(  aknFepRepository->Set( KAknFepInputTxtLang,
-                                                language ));
-    // Change input method for Chinese variants
-    if( FeatureManager::FeatureSupported( KFeatureIdChinese ) )
-        {
-        TBuf<KFepChineseInputModeLength> conversion;
-        if( language == ELangPrcChinese )
-            {
-            conversion.Num( EPinyin, EHex );
-            User::LeaveIfError( aknFepRepository->Set( KAknFepChineseInputMode, conversion ) );
-            }
-        else if( language == ELangHongKongChinese )
-            {
-            conversion.Num( EStroke, EHex );
-            User::LeaveIfError( aknFepRepository->Set( KAknFepChineseInputMode, conversion ) );
-            }
-        else if( language == ELangTaiwanChinese )
-            {
-            conversion.Num( EZhuyin, EHex );
-            User::LeaveIfError( aknFepRepository->Set( KAknFepChineseInputMode, conversion ) );
-            }
-        }
-    CleanupStack::PopAndDestroy();
-    
-    iReply = HBufC8::NewL( 1 );
-    iReply->Des().Append( 0 );
-    HTI_LOG_FUNC_OUT( "CHtiSysInfoServicePlugin::HandleSetLanguageL" );
-    }
-
-void CHtiSysInfoServicePlugin::SetDefaultNumberModeL(TInt aMode, TInt aNbrModeType)
-    {
-
-    CRepository* localeRepository = CRepository::NewL(KCRUidLocaleSettings);
-    CleanupStack::PushL(localeRepository);
-    if (aNbrModeType == EGSNbrModeTypeArabic || aNbrModeType
-            == EGSNbrModeTypeEasternArabic)
-        {
-        localeRepository->Set(KSettingsDefaultNumberMode, aMode);
-        }
-    else
-        {
-        localeRepository->Set(KSettingsIndicDefaultNumberMode, aMode);
-        }
-    CleanupStack::PopAndDestroy();
-
-    TLocale locale;
-    if (aMode == EGSNbrModeLatin)
-        {
-        locale.SetDigitType(EDigitTypeWestern);
-        }
-    else
-        {
-        //if aMode <> EGSNbrModeLatin, then it should be either latin or arabic. However
-        //as EGSNbrModeArabic and EGsNbrModeIndic both have a value = 1, we can't use
-        //that constant for below comparison. Hence, need to depend on the 2nd param.
-        switch (aNbrModeType)
-            {
-            case EGSNbrModeTypeArabic:
-                locale.SetDigitType(EDigitTypeArabicIndic);
-                break;
-            case EGSNbrModeTypeIndic:
-                locale.SetDigitType(EDigitTypeDevanagari);
-                break;
-            case EGSNbrModeTypeEasternArabic:
-                locale.SetDigitType(EDigitTypeEasternArabicIndic);
-                break;
-            default:
-                break;
-            }
-        }
-
-    locale.Set();
-    }
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::ParseTimeDataL
-//------------------------------------------------------------------------------
-void CHtiSysInfoServicePlugin::ParseTimeDataL( const TDesC8& aTimeData,
-                                               TTime& aResult )
-    {
-    /*
-      aTimeData =
-        bytes 0 - 1 = year
-                  2 = month
-                  3 = day
-                  4 = hour
-                  5 = minute
-                  6 = second
-    */
-    if ( aTimeData.Length() != KTimeDataLength )
-        {
-        User::Leave( KErrBadDescriptor );
-        }
-
-    TInt year   = aTimeData[0] + ( aTimeData[1] << 8 );
-    TInt month  = aTimeData[2];
-    TInt day    = aTimeData[3];
-    TInt hour   = aTimeData[4];
-    TInt minute = aTimeData[5];
-    TInt second = aTimeData[6];
-
-    TDateTime dateTime;
-    User::LeaveIfError( dateTime.Set(
-        year, TMonth( month - 1 ), day - 1, hour, minute, second, 0 ) );
-    aResult = dateTime;
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::CleanUpTempFiles
-//------------------------------------------------------------------------------
-TInt CHtiSysInfoServicePlugin::CleanUpTempFiles()
-    {
-    HTI_LOG_FUNC_IN( "CHtiSysInfoServicePlugin::CleanUpTempFiles" );
-    TFindFile finder( iFs );
-    CDir* dir = NULL;
-    TInt err = finder.FindWildByDir(KMatchFileName, KTempFilePath, dir);
-    TInt safeDeleteCount = 0;
-    while ( err == KErrNone && safeDeleteCount < 20)
-        {
-        safeDeleteCount++;
-        TFileName path;
-        path.Copy(finder.File());
-        HTI_LOG_FORMAT( "found file: %S", &path );
-        TInt ret = iFileMan->Delete(path);
-        delete dir;
-        dir = NULL;
-        if(ret != KErrNone)
-            {
-            break;
-            }
-        err = finder.FindWildByDir(KMatchFileName, KTempFilePath, dir);
-        }
-    HTI_LOG_FUNC_OUT("CHtiSysInfoServicePlugin::CleanUpTempFiles");
-    return KErrNone;
-    }
-
-//------------------------------------------------------------------------------
-// CHtiSysInfoServicePlugin::CanTurnBluetoothOnL
-//------------------------------------------------------------------------------
-TBool CHtiSysInfoServicePlugin::CanTurnBluetoothOnL( const TBool aUseForce )
-    {
-    HTI_LOG_FUNC_IN("CHtiSysInfoServicePlugin::CanTurnBluetoothOnL");
-    TInt isInNetwork = 0;
-    CRepository* repository = CRepository::NewL( KCRUidCoreApplicationUIs );
-    repository->Get( KCoreAppUIsNetworkConnectionAllowed, isInNetwork );
-    HTI_LOG_FORMAT( "isInNetwork = %d", isInNetwork );
-    delete repository;
-
-    if ( isInNetwork )
-        {
-        return ETrue;
-        }
-
-    // Phone is offline - check if it's allowed to turn BT on.
-
-    // If the force flag was not set in command, we won't turn BT on in offline.
-    if ( !aUseForce )
-        {
-        return EFalse;
-        }
-
-    // Check if it's possible to turn BT on in offline mode.
-    TInt btOfflineEnabled = 0;
-    CRepository* repository2 = CRepository::NewL( KCRUidBluetoothEngine );
-    repository2->Get( KBTEnabledInOffline, btOfflineEnabled );
-    HTI_LOG_FORMAT( "btOfflineEnabled = %d", btOfflineEnabled );
-    delete repository2;
-
-    if ( btOfflineEnabled )
-        {
-        return ETrue;
-        }
-    HTI_LOG_FUNC_OUT("CHtiSysInfoServicePlugin::CanTurnBluetoothOnL");
-    return EFalse;
-    }
-
-
-// ----------------------------------------------------------------------------
-CAsyncWaiter* CAsyncWaiter::NewL( TInt aPriority )
-    {
-    CAsyncWaiter* self = new(ELeave) CAsyncWaiter( aPriority );
-    return self;
-    }
-
-// ----------------------------------------------------------------------------
-CAsyncWaiter* CAsyncWaiter::NewLC( TInt aPriority )
-    {
-    CAsyncWaiter* self = new ( ELeave ) CAsyncWaiter( aPriority );
-    CleanupStack::PushL( self );
-    return self;
-    }
-
-// ----------------------------------------------------------------------------
-CAsyncWaiter::CAsyncWaiter( TInt aPriority ) : CActive( aPriority )
-    {
-    iWait = new CActiveSchedulerWait();
-    CActiveScheduler::Add( this );
-    }
-
-// ----------------------------------------------------------------------------
-CAsyncWaiter::~CAsyncWaiter()
-    {
-    Cancel();
-    delete iWait;
-    }
-
-// ----------------------------------------------------------------------------
-void CAsyncWaiter::StartAndWait()
-    {
-    HTI_LOG_FUNC_IN( "CAsyncWaiter::StartAndWait" );
-    iStatus = KRequestPending;
-    SetActive();
-    iWait->Start();
-    HTI_LOG_FUNC_OUT( "CAsyncWaiter::StartAndWait" );
-    }
-
-// ----------------------------------------------------------------------------
-TInt CAsyncWaiter::Result() const
-    {
-    return iResult;
-    }
-
-// ----------------------------------------------------------------------------
-void CAsyncWaiter::RunL()
-    {
-    HTI_LOG_FUNC_IN( "CAsyncWaiter::RunL" );
-    iResult = iStatus.Int();
-    iWait->AsyncStop();
-    HTI_LOG_FUNC_OUT( "CAsyncWaiter::RunL" );
-    }
-
-// ----------------------------------------------------------------------------
-void CAsyncWaiter::DoCancel()
-    {
-    iResult = KErrCancel;
-    if ( iStatus == KRequestPending )
-        {
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete( status, KErrCancel );
-        }
-    iWait->AsyncStop();
-    }
-
-
-// End of file