phoneclientserver/phoneserver/Src/ImageHandler/CPhSrvSubSessionImageHandler.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/phoneclientserver/phoneserver/Src/ImageHandler/CPhSrvSubSessionImageHandler.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1103 +0,0 @@
-/*
-* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Sub Session image handler.
-*                Does image saving and loading.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include    "cphsrvsubsessionimagehandler.h" 
-#include    "cphsrvsession.h" 
-#include    "cphsrvserver.h" 
-#include    <e32property.h>
-#include    <phclttypes.h> 
-#include    "phsrvdebuginfo.h" 
-
-// CONSTANTS
-_LIT( KPhSrvImageDriveRom, "z:" );
-_LIT( KPhSrvVTImageName, "vtstillimage" );
-_LIT( KPhSrvVTDefaultImageName, "vtdefaultimage." );
-_LIT( KPhSrvImageSuffix, ".mbm" );
-_LIT( KPhSrvImageWildCard, "*" );
-_LIT( KPhSrvLogoMncMccSeparator, "_" );
-_LIT( KPhSrvLogoTypeIndicatorOTA, "OTA" );
-_LIT( KPhSrvLogoTypeIndicatorProg, "Prog" );
-_LIT( KPhSrvOperatorLogoPrefix, "Logo" );
-const TInt KPhSrvNameMaxLen = 1024;
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::CPhSrvSubSessionImageHandler
-// 
-// Constructor.
-// -----------------------------------------------------------------------------
-//
-CPhSrvSubSessionImageHandler::CPhSrvSubSessionImageHandler( 
-    CPhSrvSession& aSession )
-:   CPhSrvSubSessionBase( aSession, EPhSrvSubSessionTypeImageHandler )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Ctor" )
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::~CPhSrvSubSessionImageHandler
-// 
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CPhSrvSubSessionImageHandler::~CPhSrvSubSessionImageHandler()
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Dtor" )
-    iVTBitMaps.ResetAndDestroy();
-    iOperatorLogos.ResetAndDestroy();
-    PhoneSession().PhoneServer().DisconnectFBS();
-    iFs.Close();
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Dtor>" )    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::NewL
-// 
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPhSrvSubSessionBase* CPhSrvSubSessionImageHandler::NewL(
-    CPhSrvSession& aSession )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::NewL" )    
-    CPhSrvSubSessionBase* self = 
-        new( ELeave ) CPhSrvSubSessionImageHandler( aSession );
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::NewL>" )        
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::ImageSaved
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::ImageSaved( TInt aResult )
-    {
-    iImageSaver = NULL;
-    // Message for save request
-    iSaveVtImageMessage.Complete( aResult );
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::PhSrvMessageDecoderCanProcessMessage
-// 
-// Framework function. Returns ETrue for the op codes that
-// this subsession can handle.
-// -----------------------------------------------------------------------------
-//
-TBool CPhSrvSubSessionImageHandler::PhSrvMessageDecoderCanProcessMessage( 
-    TInt aFunction )
-    {
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::CanProcess", aFunction )    
-    switch( aFunction )
-        {
-        case EPhoneServerImageHandlerSubSessionOpen:
-        case EPhoneServerImageHandlerSubSessionClose:
-        case EPhoneServerImageHandlerSubSessionSave:
-        case EPhoneServerImageHandlerSubSessionLoad:
-        case EPhoneServerImageHandlerSubSessionCommitLoad:
-        case EPhoneServerOpenVtImage:
-        // new saving scheme 
-        case EPhoneServerSaveVtImage:
-        case EPhoneServerSaveVtImageCancel:
-            return ETrue;
-            
-        default:
-            return EFalse;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::PhSrvMessageProcessorHandleMessageL
-// 
-// Framework function. Handle any op-codes here.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::PhSrvMessageProcessorHandleMessageL( 
-    const RMessage2& aMessage )
-    {
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Handle", 
-        aMessage.Function() )
-    TBool permissionStatus ( EFalse );
-    
-    // Check needed capabilities    
-    TBool hasCapWriteDeviceData( EFalse );
-    hasCapWriteDeviceData = aMessage.HasCapability( ECapabilityWriteDeviceData );
-    TBool hasCapReadDeviceData( EFalse );
-    hasCapReadDeviceData = aMessage.HasCapability( ECapabilityReadDeviceData );
-
-    switch( aMessage.Function() )
-        {
-        case EPhoneServerImageHandlerSubSessionClose:
-            CmdSubSessionClose( aMessage );
-            permissionStatus = ETrue;
-            break;
-
-        case EPhoneServerImageHandlerSubSessionSave:
-            if ( hasCapWriteDeviceData )
-                {        
-                CmdSubSessionSaveImagesL( aMessage );
-                permissionStatus = ETrue;
-                }
-            break;
-            
-        case EPhoneServerImageHandlerSubSessionCommitLoad:
-            if ( hasCapReadDeviceData )
-                {        
-                CmdSubSessionCommitLoadL( aMessage );
-                permissionStatus = ETrue;
-                }
-            break;
-            
-
-        case EPhoneServerImageHandlerSubSessionLoad:
-            if ( hasCapReadDeviceData )
-                {        
-                CmdSubSessionLoadImagesL( aMessage );
-                permissionStatus = ETrue;
-                }
-            break;
-        case EPhoneServerOpenVtImage:
-            if ( hasCapReadDeviceData )
-                {        
-                CmdSubSessionOpenDefaultVtImageL( aMessage );
-                permissionStatus = ETrue;
-                }
-            break;
-        case EPhoneServerSaveVtImage:
-            if ( hasCapWriteDeviceData )
-                {
-                CmdSubSessionSaveVtImageL( aMessage );
-                permissionStatus = ETrue;
-                }
-            break;
-        case EPhoneServerSaveVtImageCancel:            
-            if ( hasCapWriteDeviceData )
-                {
-                permissionStatus = ETrue;
-                if ( iImageSaver )
-                    {
-                    // saving in progress, cancel it.
-                    iImageSaver->Cancel();
-                    }
-                else
-                    {
-                    // nothing to cancel or too late cancellation 
-                    iSaveVtImageMessage.Complete( KErrNotReady );
-                    }
-                }
-            break;
-        default:
-            _DPRINT( 4, "CPhSrvSubSessionImageHandler::Handle: PANIC" )        
-            PhoneSession().PanicClient(
-                aMessage,
-                EPhCltServerInitiatedPanicInvalidRequest );
-            break;
-        }
-    
-    // If caps are not ok
-    if( !permissionStatus )
-        {
-        aMessage.Complete( KErrPermissionDenied );
-        }   
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Handle>" )
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::CmdSubSessionClose
-// 
-// Close the sub-session.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::CmdSubSessionClose( 
-    const RMessage2& aMessage )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Close" )    
-    PhoneSession().CloseSubSession( aMessage );
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Close>" )    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::CmdSubSessionSaveImagesL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::CmdSubSessionSaveImagesL( 
-    const RMessage2& aMessage )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Save" )    
-    TPhCltImageArray handles;
-    TPckg< TPhCltImageArray > pHandles( handles );
-    
-    Read( aMessage, 0, pHandles );
-
-    // Version check in here, if multiple possibilities.
-    switch( pHandles().iType )
-        {
-        case EPhCltTypeVTStill:
-            DoSaveVTImageL( handles );
-            break;
-        case EPhCltTypeOperatorLogo:
-            DoSaveOperatorLogoL( handles );
-            break;
-        default:
-            _DPRINT( 4, "CPhSrvSubSessionImageHandler::Save US" )        
-            User::Leave( KErrNotSupported );
-        }
-
-    // Leave is propagated into framework.
-    aMessage.Complete( KErrNone );
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Save>" )    
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::CmdSubSessionLoadImagesL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::CmdSubSessionLoadImagesL( 
-    const RMessage2& aMessage )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Load" )    
-    TPhCltImageArray handles;
-    TPckg< TPhCltImageArray > pHandles( handles );
-
-    Read( aMessage, 0, pHandles );
-
-    // Version check in here, if multiple possibilities.
-    switch( pHandles().iType )
-        {
-        case EPhCltTypeVTStill:
-        case EPhCltTypeVTDefault:
-            DoLoadVTImagesL( handles );
-            break;
-        case EPhCltTypeOperatorLogo:
-            DoLoadOperatorLogoL( handles );
-            break;
-        default:
-            _DPRINT( 4, "CPhSrvSubSessionImageHandler::Load US" )        
-            User::Leave( KErrNotSupported );
-        }
-    
-    Write( aMessage, 0, pHandles );
-    aMessage.Complete( KErrNone );
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Load>" )    
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::CmdSubSessionOpenDefaultVtImageL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::CmdSubSessionOpenDefaultVtImageL( 
-    const RMessage2& aMessage )
-    {
-    _DPRINT( 4, 
-        "CPhSrvSubSessionImageHandler::CmdSubSessionOpenDefaultVtImageL<" )
-    TBool defaultImage( ETrue );
-    TPckg< TBool > pckg( defaultImage );
-    Read( aMessage, 1, pckg );
-
-    // Currently only default still image uses file handle sharing. User
-    // defined image uses legacy scheme. If user defined image is attempted
-    // to open here, complete with error.
-    if ( !defaultImage )
-        {
-        User::Leave( KErrNotSupported );
-        }
-    
-    RFs fs;
-    RFile defaultVtImageFile;    
-    TFileName fileName;
-                                                     
-    // File extension may be any supported file type. Resolve which one is used.
-    User::LeaveIfError( ResolveDefaultVtImageFileName( fileName ) );    
-    
-    // Open separate session because ownwership of transferred file's
-    // session goes with the file (when file is closed by the client,
-    // related session is also closed)
-    User::LeaveIfError( fs.Connect() );
-    CleanupClosePushL( fs );
-     
-    User::LeaveIfError( defaultVtImageFile.Open( fs, fileName, EFileRead ) );
-    
-    // Transfer file handle to client by writing file handle value to
-    // message argument 0
-    User::LeaveIfError( 
-        defaultVtImageFile.TransferToClient( aMessage, 0 ) );    
-    defaultVtImageFile.Close(); // file handle duplicated for client
-    CleanupStack::PopAndDestroy(); // fs, can be closed, handle duplicated
-     
-    _DPRINT( 4, 
-        "CPhSrvSubSessionImageHandler::CmdSubSessionOpenDefaultVtImageL>" )
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::ResolveDefaultVtImageFileName
-// 
-// Resolves file name of default VT image. Extension cannot be known
-// in advance and directory entries must be read and parsed.
-// -----------------------------------------------------------------------------
-//
-TInt CPhSrvSubSessionImageHandler::ResolveDefaultVtImageFileName(
-    TDes& aFileName )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::ResolveDefaultVtImageFileName<" )
-    CDir* entries = NULL;    
-    TFileName path = KPhSrvImageDriveRom();
-    
-    // read directory entries in the server private path
-    path.Append( iFilePath );    
-    TInt result = iFs.GetDir( path, KEntryAttNormal, EDirsLast, entries );
-    if ( result == KErrNone && entries )
-        {
-        const TInt entryCount( entries->Count() );
-        // go through entries and stop when VT image file is found
-        for ( TInt index = 0; index < entryCount; index++ )
-            {
-            const TEntry& entry = ( *entries )[index];  
-            if ( entry.iName.Find( KPhSrvVTDefaultImageName() ) > KErrNotFound )
-                {
-                aFileName = path;
-                aFileName.Append( entry.iName );
-                // fileName now contains full path
-                index = entryCount; // break loop
-                result = KErrNone;
-                }
-            }
-        }
-    delete entries;
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::ResolveDefaultVtImageFileName>" )
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::CmdSubSessionSaveVtImageL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::CmdSubSessionSaveVtImageL( 
-    const RMessage2& aMessage )
-    {
-    TFileName sourceFile;
-    TPckg<TFileName> pckg( sourceFile );
-    
-    Read( aMessage, 0, pckg );
-    CPhSrvImageSaver* saver = CPhSrvImageSaver::NewL( iFs, iFilePath, *this );
-    CleanupStack::PushL( saver );
-    saver->SaveImageL( sourceFile );
-    CleanupStack::Pop();
-    iImageSaver = saver;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::CmdSubSessionCommitLoadL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::CmdSubSessionCommitLoadL( 
-    const RMessage2& aMessage )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Commit" )    
-    TPhCltImageArray handles;
-    TPckg< TPhCltImageArray > pHandles( handles );
-
-    Read( aMessage, 0, pHandles );
-    
-    switch ( pHandles().iType )
-        {
-        case EPhCltTypeVTStill:
-        case EPhCltTypeVTDefault:
-            DoCommitLoadVTL();
-            break;
-        case EPhCltTypeOperatorLogo:
-            DoCommitLoadLogo( handles );
-            break;
-        default:
-            _DPRINT( 4, "CPhSrvSubSessionImageHandler::Commit US" )        
-            User::Leave( KErrNotSupported );        
-        }
-    aMessage.Complete( KErrNone );
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Commit" )    
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DoCommitLoadVTL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::DoCommitLoadVTL()
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::CommitVT" )    
-    iVTBitMaps.ResetAndDestroy(); 
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::CommitVT>" )        
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DoCommitLoadLogo
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::DoCommitLoadLogo( TPhCltImageArray& aImages )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::CommitLogo" )        
-    for ( TInt i = 0; i < iOperatorLogos.Count(); i ++ )
-        {
-        if ( aImages.iImages[ EPhCltExtCountryCodeIndex ] == 
-            iOperatorLogos[ i ]->iCountryCode && 
-            aImages.iImages[ EPhCltExtNetworkCodeIndex ] == 
-            iOperatorLogos[ i ]->iNetworkCode )
-            {
-            _DPRINT( 4, "CPhSrvSubSessionImageHandler::CommitLogo found" )                
-            delete iOperatorLogos[ i ];
-            iOperatorLogos.Remove( i );
-            break;
-            }
-        }
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::CommitLogo>" )            
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DoSaveVTImage
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::DoSaveVTImageL( TPhCltImageArray& aImages )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::SaveVT" )        
-    HBufC* hbuf = HBufC::NewLC(KPhSrvNameMaxLen);
-    TPtr buf = hbuf->Des();
-    for ( TInt i = 0; i < aImages.iImageCount; i++ )
-        {
-        buf.Zero();
-        buf.Append( iDriveName );
-        buf.Append( iFilePath );
-        buf.Append( KPhSrvVTImageName );
-        buf.AppendNum( i );
-        buf.Append( KPhSrvImageSuffix );
-        buf.ZeroTerminate();
-#ifdef __PHENG_DEBUG_INFO__
-        RDebug::Print( _L("CPhSrvSubSessionImageHandler::SaveVT: %S"), &buf );
-#endif
-        CFbsBitmap* bitMap = new ( ELeave ) CFbsBitmap();
-        CleanupStack::PushL( bitMap );
-        User::LeaveIfError( bitMap->Duplicate( aImages.iImages[ i ] ) );
-        User::LeaveIfError( bitMap->Save( buf ) );
-        CleanupStack::PopAndDestroy( bitMap );
-        }
-    CleanupStack::PopAndDestroy( hbuf );
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::SaveVT>" )        
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DoLoadVTImagesL
-// 
-// Loads images.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::DoLoadVTImagesL( TPhCltImageArray& aImages )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::LoadVT" )    
-    // Load the images from file.
-    const TBool loadDefaultImage = aImages.iType == EPhCltTypeVTDefault;    
-    DoReadVTImagesL( loadDefaultImage );
-    
-    // Copy handles.
-    aImages.iImageCount = iVTBitMaps.Count();
-    for ( TInt i = 0; i < aImages.iImageCount; i++ )
-        {
-        aImages.iImages[ i ] = iVTBitMaps[ i ]->Handle();
-        _DDPRINT( 4, 
-            "CPhSrvSubSessionImageHandler::LoadVT: ", aImages.iImages[ i ] )
-        }
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::LoadVT>" )        
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DoReadVTImagesL
-// 
-// Loads images.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::DoReadVTImagesL( const TBool aDefaultImage )
-    {
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::ReadVT is default=", aDefaultImage )     
-    iVTBitMaps.ResetAndDestroy();
-    
-    TPtrC path; // pointer to sub-string of searchPath containing drive+path
-    
-    // Search path = drive + path + file-name (with wildcard) + extension
-    HBufC* searchPath = ConstructVTImageSearchPathLC( 
-        aDefaultImage, path );
-
-#ifdef __PHENG_DEBUG_INFO__
-        TPtr ptr = searchPath->Des();  // temp pointer to avoid lvalue compile warning
-        RDebug::Print( _L( 
-            "CPhSrvSubSessionImageHandler::ReadVT: %S"), ( &ptr ));
-#endif    
-    RDir dir;
-    User::LeaveIfError( dir.Open( iFs, *searchPath, KEntryAttNormal ) );    
-    CleanupClosePushL( dir );
-    
-    TEntryArray entryArray;
-    TInt readResult = dir.Read( entryArray );
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::ReadVT res: ", readResult )
-    HBufC* hbitmapName = HBufC::NewLC( KMaxFileName );
-    TPtr bitmapName = hbitmapName->Des();
-    
-    // If directory entry array read successfully...
-    while( ( readResult == KErrNone ) || ( readResult == KErrEof ) )
-        {
-        const TInt arrayLength = entryArray.Count();
-        _DDPRINT( 4, "CPhSrvSubSessionImageHandler::DoReadVTImagesL count: ", arrayLength )
-        // ...go through directory entries
-        for( TInt i = 0; i < arrayLength; i++ )
-            {
-            const TEntry& entry = entryArray[ i ];
-            const TDesC& name = entry.iName;
-            TBool load = EFalse;
-            // If client wanted default image, load it only
-            if ( aDefaultImage && 
-                 name.FindF( KPhSrvVTDefaultImageName ) == 0 )
-                {
-                /* Next two statements for stopping to process 
-                  directory entries */                       
-                i = arrayLength;
-                readResult = KErrEof;
-                load = ETrue;
-                }
-            // If client wanted still image, load it (or them)
-            else if ( !aDefaultImage &&
-                      name.FindF( KPhSrvVTImageName ) == 0 )
-                {
-                load = ETrue;
-                }
-            if ( load )
-                {
-                CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap();
-                CleanupStack::PushL( bitmap );
-                bitmapName = path;  // initialize the file path
-                bitmapName.Append( name );
-#ifdef __PHENG_DEBUG_INFO__
-                RDebug::Print( _L( 
-                    "CPhSrvSubSessionImageHandler::ReadVT BM: %S"), 
-                    &bitmapName );
-#endif    
-                User::LeaveIfError( bitmap->Load( bitmapName ) );
-                User::LeaveIfError( iVTBitMaps.Append( bitmap ) );
-                CleanupStack::Pop(); // bitmap
-                }
-            }
-        
-        if ( readResult == KErrEof )
-            {
-            _DPRINT( 4, "CPhSrvSubSessionImageHandler::ReadVT EOF" )            
-            break;            
-            }
-        readResult = dir.Read( entryArray );
-        }
-    CleanupStack::PopAndDestroy( 3 ); // hbitmapName, dir, search path
-    if( ( readResult != KErrNone ) && ( readResult != KErrEof ) )
-        {
-        _DDPRINT( 4, "CPhSrvSubSessionImageHandler::ReadVT Leave", readResult )                    
-        User::Leave( readResult );
-        }    
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::ReadVT>" )
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DoSaveOperatorLogoL
-// 
-// 
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::DoSaveOperatorLogoL( TPhCltImageArray& aImages )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::SaveLogo" )
-    // Check the values prior saving, 
-    // to check whether deletion is actually ongoing
-    const TPhCltCountryCode mcc = aImages.iImages[ EPhCltExtCountryCodeIndex ];
-    const TPhCltNetworkCode mnc= aImages.iImages[ EPhCltExtNetworkCodeIndex ];
-    const TInt handle = aImages.iImages[ EPhCltExtOperatorLogoIndex ];
-    const TPhCltExtOperatorLogoType logoType = 
-        ( TPhCltExtOperatorLogoType )aImages.iImages[ EPhCltExtLogoTypeIndex ];
-        
-    // Only OTA logos can be saved and deleted.
-    if ( logoType == EPhCltLogoTypeProgrammable )
-        {
-        _DPRINT( 4, "CPhSrvSubSessionImageHandler::SaveLogo PROG" )
-        User::Leave( KErrAccessDenied );
-        }
-
-    _DPRINT( 4, "PhSrvImageHandler::SaveLogo test delete " )        
-    // Check if this a delete command.
-    // If no logo deleted, then this is save command.
-    if ( !DeleteLogoL( mcc, mnc, logoType, handle ) )
-        {
-        _DPRINT( 4, "CPhSrvSubSessionImageHandler::SaveLogo Save" )
-        HBufC* hbuf = HBufC::NewLC(KPhSrvNameMaxLen);
-        TPtr buf = hbuf->Des();
-        ConstructLogoFileNameL( mcc, mnc, logoType, buf );
-        CFbsBitmap* bitMap = new ( ELeave ) CFbsBitmap();
-        CleanupStack::PushL( bitMap );
-        User::LeaveIfError( bitMap->Duplicate( 
-            aImages.iImages[ EPhCltExtOperatorLogoIndex ] ) );
-        User::LeaveIfError( bitMap->Save( buf ) );
-        CleanupStack::PopAndDestroy( 2, hbuf );   // hbuf, bitMap
-        NotifyListeners( // Error ignored.
-            mcc, mnc, TTelephonyOTALogoUpdate::EPSTelephonyLogoChanged );
-        // new P&S key update         
-        NotifyListeners( // Error ignored.
-            mcc, mnc, TTelOTALogoUpdate::EPSTelephonyLogoChanged );
-        }
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::SaveLogo>" )                
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DoLoadOperatorLogoL
-// 
-// Loads images.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::
-    DoLoadOperatorLogoL( TPhCltImageArray& aImages )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::LoadLogo" )            
-    // Construct the file path first.
-    HBufC* hbuf = HBufC::NewLC(KPhSrvNameMaxLen);
-    TPtr buf = hbuf->Des();
-    TInt err( KErrNone );
-    ConstructLogoFileNameL( aImages.iImages[ EPhCltExtCountryCodeIndex ], 
-        aImages.iImages[ EPhCltExtNetworkCodeIndex ], 
-        ( TPhCltExtOperatorLogoType ) aImages.iImages[ EPhCltExtLogoTypeIndex ],
-        buf );
-    
-    // Load the image.
-    CFbsBitmap* bitMap = new ( ELeave ) CFbsBitmap();
-    CleanupStack::PushL( bitMap );
-    err = bitMap->Load( buf );
-    if ( err == KErrPathNotFound )
-        {
-        err = KErrNotFound;
-        }
-    User::LeaveIfError( err );    
-    
-    CPhSrvOperatorLogoContainer* logoContainer = 
-        new (ELeave)CPhSrvOperatorLogoContainer( 
-        aImages.iImages[ EPhCltExtCountryCodeIndex ], 
-        aImages.iImages[ EPhCltExtNetworkCodeIndex ], 
-        ( TPhCltExtOperatorLogoType ) aImages.iImages[ EPhCltExtLogoTypeIndex ],
-        bitMap );
-    aImages.iImages[ EPhCltExtOperatorLogoIndex ] = bitMap->Handle();
-    aImages.iImageCount = 1;
-    CleanupStack::PushL(logoContainer);
-    iOperatorLogos.AppendL( logoContainer );
-    CleanupStack::Pop(logoContainer);
-    CleanupStack::Pop( bitMap );
-    CleanupStack::PopAndDestroy( hbuf );
-    
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::LoadLogo>" )            
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::MakeImageDirL
-// 
-// Creates directory structure.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::MakeImageDirL()
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::MakeDir" )    
-    TDriveNumber sysDrive;
-    User::LeaveIfError( BaflUtils::GetSystemDrive( sysDrive ) );
-    iDriveName.Format( _L("%c:"), sysDrive +'A' );
-    const TInt err( iFs.CreatePrivatePath( sysDrive ) );
-    if (  err != KErrAlreadyExists && err != KErrNone )
-        {
-        User::Leave( err );
-        }
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::MakeDir>" )            
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::ConstructVTImageSearchPathLC
-// 
-// Construct search path for VT image.
-// -----------------------------------------------------------------------------
-//
-HBufC* CPhSrvSubSessionImageHandler::ConstructVTImageSearchPathLC( 
-    const TBool aDefaultImage,
-    TPtrC& aPath ) const
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::ConstructVTImageSearchPathLC<" )
-    HBufC* hfilePath = HBufC::NewLC( KMaxFileName );
-    TPtr filePath = hfilePath->Des();
-
-    filePath = iFilePath; // = "\private\<phone server uid>\"
-
-    if ( aDefaultImage )
-        {
-        // = "z:\private\<phone server uid>\"
-        //    ==
-        filePath.Insert( 0, KPhSrvImageDriveRom );      
-        
-        aPath.Set( filePath );
-        
-        // = "z:\private\<phone server uid>\vtdefaultimage"
-        //                                  ==============
-        filePath.Append( KPhSrvVTDefaultImageName() );  
-        }
-    else
-        {
-        // = "c:\private\<phone server uid>\"
-        //    ==
-        filePath.Insert( 0, iDriveName );
-        
-        aPath.Set( filePath );
-        
-        // = "c:\private\<phone server uid>\vtstillimage"         
-        //                                  ============
-        filePath.Append( KPhSrvVTImageName() );
-        }        
-    // = "c:\private\<phone server uid>\<still|default>*"
-    //                                                 =
-    filePath.Append( KPhSrvImageWildCard() );           
-    
-    // = "c:\private\<phone server uid>\<still|default>*.mbm"
-    //                                                  ====
-    filePath.Append( KPhSrvImageSuffix() );             
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::ConstructVTImageSearchPathLC>" )
-    return hfilePath;
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::ConstructL
-// 
-// 2nd phase construction.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvSubSessionImageHandler::ConstructL()
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::CtorL" )        
-    PhoneSession().PhoneServer().ConnectFBS();
-    User::LeaveIfError( iFs.Connect() );
-    User::LeaveIfError( iFs.ShareProtected() );
-    MakeImageDirL();
-    User::LeaveIfError( iFs.PrivatePath( iFilePath ) );
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::CtorL>" )  
-    }
- 
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::DeleteLogoL
-// 
-// Checks if logo(s) should be deleted, and deletes them if needed.
-// -----------------------------------------------------------------------------
-//    
-TBool CPhSrvSubSessionImageHandler::DeleteLogoL( 
-    const TPhCltCountryCode aCountryCode, 
-    const TPhCltNetworkCode aNetworkCode,
-    const TPhCltExtOperatorLogoType aLogoType,
-    const TInt aFileHandle )
-    {
-    _DPRINT( 4, "PhSrvImageHandler::DeleteLogoL" )    
-    TBool deleted = EFalse;
-    
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::DelLogo ", aCountryCode )      
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::DelLogo ", aNetworkCode )      
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::DelLogo ", aLogoType )      
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::DelLogo ", aFileHandle )      
-    
-    // Check if all, one or none.
-    if ( aFileHandle == KPhCltDeleteOperatorLogo )
-        {
-        HBufC* hbuf = HBufC::NewLC(KPhSrvNameMaxLen);
-        TPtr buf = hbuf->Des();
-        if ( aCountryCode == KPhCltDeleteOperatorLogo && 
-            aNetworkCode == KPhCltDeleteOperatorLogo )
-            {
-            // Delete all logos.
-            TFindFile* finder = new(ELeave) TFindFile(iFs);
-            CleanupStack::PushL(finder);
-            
-            HBufC* hfilePath = HBufC::NewLC(KMaxFileName);
-            TPtr filePath = hfilePath->Des();
-            filePath = iDriveName;
-            filePath.Append( iFilePath );
-
-            buf.Append( KPhSrvOperatorLogoPrefix );
-            buf.Append( KPhSrvLogoMncMccSeparator );
-            buf.Append( KPhSrvImageWildCard );
-#ifdef __PHENG_DEBUG_INFO__
-    RDebug::Print( _L( 
-        "CPhSrvSubSessionImageHandler::DelLogo: %S"), &buf );
-#endif              
-            CDir* foundFiles = NULL;
-            const TInt err = finder->FindWildByDir( buf, filePath, foundFiles );
-            if ( err != KErrNone )
-                {
-                _DDPRINT( 4, "CPhSrvSubSessionImageHandler::DelLogo Leave", err )
-                delete foundFiles;
-                foundFiles = NULL;
-                User::Leave( err );
-                }
-            for ( TInt i = 0; i < foundFiles->Count(); i++ )
-                {
-                const TEntry& entry = foundFiles->operator[ ]( i );
-#ifdef __PHENG_DEBUG_INFO__
-    RDebug::Print( _L( 
-        "CPhSrvSubSessionImageHandler::DelLogo: rem %S"), &entry.iName );
-#endif                 
-                BaflUtils::DeleteFile( iFs, entry.iName );
-                }
-            delete foundFiles;
-            deleted = ETrue;
-            NotifyListeners( // Error ignored.
-                KPhCltDeleteOperatorLogo, KPhCltDeleteOperatorLogo, 
-                TTelephonyOTALogoUpdate::EPSTelephonyAllLogosDeleted );
-            // new P&S key update    
-            NotifyListeners( // Error ignored.
-                KPhCltDeleteOperatorLogo, KPhCltDeleteOperatorLogo, 
-                TTelOTALogoUpdate::EPSTelephonyAllLogosDeleted );                
-             
-            CleanupStack::PopAndDestroy( 2, hfilePath );    // finder, hfilePath
-            }
-        else
-            {
-            // Delete specified logo.
-            ConstructLogoFileNameL( 
-                aCountryCode, aNetworkCode, aLogoType, buf );
-            BaflUtils::DeleteFile( iFs, buf );
-            deleted = ETrue;
-            NotifyListeners( aCountryCode, aNetworkCode, 
-                TTelephonyOTALogoUpdate::EPSTelephonyLogoDeleted );
-            NotifyListeners( // Error ignored.
-                KPhCltDeleteOperatorLogo, KPhCltDeleteOperatorLogo, 
-                TTelOTALogoUpdate::EPSTelephonyAllLogosDeleted );                
-            }
-            
-        CleanupStack::PopAndDestroy( hbuf );
-        }
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::DelLogo>", deleted )              
-    return deleted;
-    }
-   
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::ConstructLogoFileNameL
-// 
-// Creates operator logo file name.
-// -----------------------------------------------------------------------------
-//     
-void CPhSrvSubSessionImageHandler::ConstructLogoFileNameL(
-    const TPhCltCountryCode aCountryCode, 
-    const TPhCltNetworkCode aNetworkCode,
-    const TPhCltExtOperatorLogoType aLogoType,
-    TDes& aFileName )    
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::LogoName")    
-    aFileName.Zero();
-    if ( aLogoType == EPhCltLogoTypeOTA )
-        {
-        aFileName.Append( iDriveName );  
-        }
-    else
-        {
-        aFileName.Append( KPhSrvImageDriveRom );
-        }
-    aFileName.Append( iFilePath );
-    aFileName.Append( KPhSrvOperatorLogoPrefix );
-    aFileName.Append( KPhSrvLogoMncMccSeparator );        
-    aFileName.AppendNum( aCountryCode );
-    aFileName.Append( KPhSrvLogoMncMccSeparator );
-    aFileName.AppendNum( aNetworkCode );
-    aFileName.Append( KPhSrvLogoMncMccSeparator );
-    AppendLogoTypeAsTextL( aLogoType, aFileName );
-    aFileName.Append( KPhSrvImageSuffix );
-#ifdef __PHENG_DEBUG_INFO__
-    RDebug::Print( _L( 
-        "CPhSrvSubSessionImageHandler::LogoName: %S"), &aFileName );
-#endif    
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::AppendLogoTypeAsTextL
-// 
-// Appends logo type to buffer.
-// -----------------------------------------------------------------------------
-//     
-void CPhSrvSubSessionImageHandler::
-    AppendLogoTypeAsTextL( 
-    const TPhCltExtOperatorLogoType aLogoType, TDes& aType )
-    {
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::LogoType: ", aLogoType )        
-    switch ( aLogoType )
-        {
-        case EPhCltLogoTypeOTA:
-            aType.Append( KPhSrvLogoTypeIndicatorOTA );
-            break;
-        case EPhCltLogoTypeProgrammable:
-            aType.Append( KPhSrvLogoTypeIndicatorProg );
-            break;
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::LogoType>" )
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::NotifyListeners
-// 
-// Updates publish & subscribe information with event happened.
-// -----------------------------------------------------------------------------
-//     
-TInt CPhSrvSubSessionImageHandler::
-    NotifyListeners( const TPhCltCountryCode aCountryCode, 
-    const TPhCltNetworkCode aNetworkCode,
-    const TTelephonyOTALogoUpdate::TPSOperatorLogoUpdateEvent aEvent )  
-    {
-    TInt err( KErrNone );
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify ", aCountryCode ) 
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify ", aNetworkCode )
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify ", aEvent )
-    // If not exist define key
-    if ( !iPropertyDefined )
-        {
-        err = RProperty::Define(  KPSUidPhoneClientServerInformation, 
-            KTelOperatorLogoUpdated, RProperty::EByteArray, ECapability_None, ECapabilityWriteDeviceData);
-
-        _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify defined: ", err )
-        if ( err == KErrAlreadyExists )
-            {
-            // No error.
-            err = KErrNone;
-            }
-        }
-
-    // Set event
-    if ( err == KErrNone )
-        {
-        TTelephonyOTALogoUpdate update;
-        TTelephonyOTALogoUpdate::TOTALogoUpdatePckg logoUpdate( update );
-        logoUpdate().iEvent = aEvent;
-        logoUpdate().iMCC = aCountryCode;
-        logoUpdate().iMNC = aNetworkCode;
-        iPropertyDefined = ETrue;        
-        err = RProperty::Set( 
-            KPSUidPhoneClientServerInformation, KTelOperatorLogoUpdated, logoUpdate );
-        }
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify> ", err )
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhSrvSubSessionImageHandler::NotifyListeners
-// 
-// Updates publish & subscribe information with event happened.
-// New P&S key used.
-// -----------------------------------------------------------------------------
-//     
-TInt CPhSrvSubSessionImageHandler::
-    NotifyListeners( const TPhCltCountryCode aCountryCode, 
-    const TPhCltNetworkCode aNetworkCode,
-    const TTelOTALogoUpdate::TPSOperatorLogoUpdateEvent aEvent )  
-    {
-    TInt err( KErrNone );
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify ", aCountryCode ) 
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify ", aNetworkCode )
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify ", aEvent )
-    // If not exist define key
-    if ( !iPropertyDefined )
-        {
-        err = RProperty::Define(  KPSUidPhoneClientServerInformation, 
-            KTelOperatorLogoUpdated, RProperty::EByteArray, ECapability_None, ECapabilityWriteDeviceData);
-
-        _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify defined: ", err )
-        if ( err == KErrAlreadyExists )
-            {
-            // No error.
-            err = KErrNone;
-            }
-        }
-
-    // Set event
-    if ( err == KErrNone )
-        {
-        TTelOTALogoUpdate update;
-        TTelOTALogoUpdate::TOTALogoUpdatePckg logoUpdate( update );
-        logoUpdate().iEvent = aEvent;
-        logoUpdate().iMCC = aCountryCode;
-        logoUpdate().iMNC = aNetworkCode;
-        iPropertyDefined = ETrue;      
-        err = RProperty::Set( 
-            KPSUidPhoneClientServerInformation, KTelOperatorLogoUpdated, logoUpdate );  
-        }
-    _DDPRINT( 4, "CPhSrvSubSessionImageHandler::Notify> ", err )
-    return err;
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhSrvOperatorLogoContainer::CPhSrvOperatorLogoContainer
-// 
-// Constructor.
-// -----------------------------------------------------------------------------
-//   
-CPhSrvSubSessionImageHandler::
-    CPhSrvOperatorLogoContainer::CPhSrvOperatorLogoContainer(
-    const TPhCltCountryCode aCountryCode, 
-    const TPhCltNetworkCode aNetworkCode,
-    const TPhCltExtOperatorLogoType aLogoType, 
-    CFbsBitmap* aBitmap ) :
-    iBitmap( aBitmap ), iCountryCode( aCountryCode ), 
-    iNetworkCode( aNetworkCode ), iLogoType( aLogoType )
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Container::Ctor" )    
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhSrvOperatorLogoContainer::~CPhSrvOperatorLogoContainer
-// 
-// Destructor.
-// -----------------------------------------------------------------------------
-//   
-CPhSrvSubSessionImageHandler::
-    CPhSrvOperatorLogoContainer::~CPhSrvOperatorLogoContainer( ) 
-    {
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Container::Dtor" )        
-    delete iBitmap;
-    iBitmap = NULL;
-    _DPRINT( 4, "CPhSrvSubSessionImageHandler::Container::Dtor>" )        
-    }    
-    
-// End of File