diff -r 6369bfd1b60d -r 08b5eae9f9ff homesync/contentmanager/cmserver/cmserver/src/server/cmserversession.cpp --- a/homesync/contentmanager/cmserver/cmserver/src/server/cmserversession.cpp Mon Nov 01 13:44:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1138 +0,0 @@ -/* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Session implementation class for Content Manager -* -*/ - - -// INCLUDE FILES -#include -#include - -#include "cmcommon.h" -#include "cmfillrulecontainer.h" -#include "cmfillrule.h" -#include "cmstorerulecontainer.h" -#include "cmstorerule.h" -#include "cmbaselistitem.h" -#include "cmdmmain.h" -#include "cmsettingsfactory.h" -#include "cmsettings.h" -#include "cmmediaserverfull.h" -#include "cmsqlpropertycontainer.h" -#include "cmsqlpropertycollector.h" -#include "cmdriveinfo.h" -#include "cmserversession.h" -#include "cmserver.h" -#include "msdebug.h" - -// data buffer size -const TInt KBufferExpandSize = KKilo; - - -// ============================ MEMBER FUNCTIONS ============================= - -// --------------------------------------------------------------------------- -// CCmSession::CCmSession -// --------------------------------------------------------------------------- -// -CCmSession::CCmSession( CCmDmMain& aDbManager, MCmSettings& aSettings ) - : iDbManager( aDbManager ), iSettings( aSettings ) - { - } - -// --------------------------------------------------------------------------- -// CCmSession::NewL -// --------------------------------------------------------------------------- -// -CCmSession* CCmSession::NewL( CCmDmMain& aDbManager, - MCmSettings& aSettings ) - { - LOG(_L("[Cm Server]\t CCmSession::NewL")); - CCmSession* self = - new (ELeave) CCmSession( aDbManager, aSettings ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CCmSession::ConstructL -// --------------------------------------------------------------------------- -// -void CCmSession::ConstructL() - { - LOG(_L("[Cm Server]\t CCmSession::ConstructL")) - iCollector = CCmSqlPropertyCollector::NewL(); - } - - -// --------------------------------------------------------------------------- -// CCmSession::~CCmSession -// --------------------------------------------------------------------------- -// -CCmSession::~CCmSession() - { - LOG(_L("[Cm Server]\t CCmSession::~CCmSession")); - - delete iDataBuffer; - - Server().DecrementSessions(); - - delete iCollector; - } - - - -// --------------------------------------------------------------------------- -// CCmSession::Server -// Returns a reference to server -// --------------------------------------------------------------------------- -// -CCmServer& CCmSession::Server() - { - LOG(_L("[Cm Server]\t CCmSession::Server")); - - return *static_cast(const_cast - (CSession2::Server())); - } - - - -// --------------------------------------------------------------------------- -// CCmSession::ServiceL -// Implements CSession2 -derived ServiceL -method. -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CCmSession::ServiceL(const RMessage2& aMessage) - { - LOG(_L("[Cm Server]\t CCmSession::ServiceL")); - - switch ( aMessage.Function() ) - { - case ECmExecuteService: - { - LOG(_L("[Cm Server]\t ECmExecuteService request")); - TCmService service = (TCmService)aMessage.Int0(); - - TRACE( Print (_L("[Cm Server]\t CCmSession::\ - ServiceL ECmExecuteService service = %d\n"), service )); - - Server().SetCurrentAsyncMsg( aMessage ); - Server().ExecuteServiceL( service ); - break; - } - - case ECmCancel: - { - LOG(_L("[Cm Server]\t ECmCancel request")); - Server().CancelServiceL(); - - aMessage.Complete( KErrNone ); - break; - } - - case ECmGetServerState: - { - LOG(_L("[Cm Server]\t ECmGetServerState request")); - TPckg pckg( Server().ServerState() ); - aMessage.WriteL(0, pckg ); - aMessage.Complete( KErrNone ); - break; - } - - case ECmGetServiceState: - { - LOG(_L("[Cm Server]\t ECmGetServiceState request")); - TCmService service = static_cast(aMessage.Int0()); - - TRACE( Print (_L("[Cm Server]\t CCmSession::\ - ServiceL ECmGetServiceState service = %d\n"), service )); - - TCmServiceState state = ECmServiceStateDisabled; - TInt err( KErrNone ); - switch ( service ) - { - case ECmServiceFill: // fall through - case ECmServiceStore: // fall through - case ECmServiceContentManager: - { - iSettings.GetServiceState( ECmServiceContentManager, - state ); - if ( state ) - { - TBool autoSync = EFalse; - iSettings.GetAutoSync( autoSync ); - if ( autoSync ) - { - state = ECmServiceStateAutomatic; - } - else - { - LOG(_L("[Cm Server]\t ECmGetServiceState \ - request autosync = disabled")); - } - } - else - { - LOG(_L("[Cm Server]\t ECmGetServiceState request \ - state = ECmServiceStateDisabled")); - } - break; - } - case ECmServiceMemoryManager: - { - TBool mm = EFalse; - iSettings.GetMemoryManagerStatus( mm ); - state = ECmServiceStateAutomatic; - if ( !mm ) - { - state = ECmServiceStateDisabled; - } - - break; - } - default: - { - err = KErrArgument; - break; - } - } - TPckg pckg( state ); - aMessage.WriteL(1, pckg ); - aMessage.Complete( err ); - break; - } - - case ECmSetServiceState: - { - LOG(_L("[Cm Server]\t ECmSetServiceState request")); - - TCmService service = static_cast(aMessage.Int0()); - TCmServiceState state = - static_cast(aMessage.Int1()); - - TRACE(Print(_L("[Cm Server]\t service %d state %d \n"), - service, state )); - - Server().SetServiceStateL( service, state ); - - aMessage.Complete( KErrNone ); - break; - } - - case ECmGetItemCount: - { - LOG(_L("[Cm Server]\t ECmGetItemCount request")); - TCmService service = static_cast(aMessage.Int2()); - - TRACE( Print (_L("[Cm Server]\t CCmSession::\ - ServiceL ECmGetItemCount service = %d\n"), service )); - - TInt len = aMessage.GetDesLength( 3 ); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmGetItemCount request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - HBufC8* name = HBufC8::NewLC( len ); - TPtr8 ptr( name->Des() ); - aMessage.ReadL( 3, ptr ); - TInt64 size = 0; - TInt count = 0; - - if ( service == ECmServiceFill ) - { - size = iDbManager.ListSize( - ECmFmFillRule, - *name, - ECmFilled | ECmToBeFilled | ECmToBeShrinked - ); - iDbManager.GetFillFileCount( - *name, - ECmFilled | ECmToBeFilled | ECmToBeShrinked, - count - ); - TRACE(Print(_L("[Cm Server]\t got fill size %ld count %d"), - size, count)); - } - else // ECmServiceStore - { - size = iDbManager.ListSize( - ECmFmStoreRule, - *name, - ECmToBeRemoved | ECmToBeShrinked | ECmKeepOnDevice - ); - iDbManager.GetStoreFileCount( - *name, - ECmToBeRemoved | ECmToBeShrinked | ECmKeepOnDevice, - count - ); - TRACE(Print(_L("[Cm Server]\t got store size %ld count %d"), - size, count)); - } - CleanupStack::PopAndDestroy( name ); - TPckg countPckg( count ); - TPckg sizePckg( size ); - aMessage.WriteL( 0, countPckg ); - aMessage.WriteL( 1, sizePckg ); - - aMessage.Complete( KErrNone ); - break; - } - - case ECmGetTransferInfo: - { - LOG(_L("[Cm Server]\t ECmGetTransferInfo request")); - TCmService service = static_cast(aMessage.Int0()); - TInt count( 0 ); - TInt time( 0 ); - TPckg countPckg( count ); - TPckg timePckg( time ); - - iDbManager.GetTransferInfo( - service, count, time ); - - TRACE(Print(_L("[Cm Server]\t ECmGetTransferInfo \ - count = %d, time = %d"), count, time)); - - aMessage.WriteL( 1, countPckg ); - aMessage.WriteL( 2, timePckg ); - aMessage.Complete( KErrNone ); - break; - } - - - case ECmGetDataFields: - { - LOG(_L("[Cm Server]\t ECmGetDataFields request")); - - TInt len = aMessage.GetDesLength(0); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmGetDataFields request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - TRACE(Print(_L("[Cm Server]\t buffer length is %d"), len)); - - HBufC8* buffer = HBufC8::NewLC(len); - - TPtr8 ptr(buffer->Des()); - aMessage.ReadL(0, ptr); - RDesReadStream stream; - stream.Open(ptr); - CleanupClosePushL(stream); - - iCollector->InternalizeL( stream ); - - Server().SetCurrentAsyncMsg( aMessage ); - Server().ExecuteServiceL( ECmServiceGetFillFields, - 0, - iCollector ); - CleanupStack::PopAndDestroy( 2 ); - break; - } - - case ECmGetDataFieldSize: - { - LOG(_L("[Cm Server]\t ECmGetDataFieldSize request")); - - delete iDataBuffer; - iDataBuffer = NULL; - - iDataBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream propertyStream; - propertyStream.Open( *iDataBuffer ); - CleanupClosePushL( propertyStream ); - - CCmSqlPropertyCollector* propertyCollector = - Server().PropertyCollector(); - - if( !propertyCollector ) - { - LOG(_L("[Cm Server]\t ECmGetDataFieldSize request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - propertyCollector->ExternalizeL( propertyStream ); - - TInt size = iDataBuffer->Size(); - TPckg pckg( size ); - aMessage.WriteL(0, pckg ); - CleanupStack::PopAndDestroy( &propertyStream ); - - TRACE(Print(_L("[Cm Server]\t buffer size is %d"), size)); - - aMessage.Complete( KErrNone ); - break; - } - - case ECmGetDataBuffer: - { - TInt errCode = KErrNone; - if ( !iDataBuffer ) - { - LOG(_L("[Cm Server]\t ECmGetDataBuffer \ - databuffer doesn't exist")); - errCode = KErrNotReady; - } - - if (errCode == KErrNone ) - { - aMessage.WriteL(0, iDataBuffer->Ptr(0)); - } - aMessage.Complete( errCode ); - break; - } - - case ECmGetFillRulesSize: - { - LOG(_L("[Cm Server]\t ECmGetFillRulesSize request")); - - delete iDataBuffer; - iDataBuffer = NULL; - - iDataBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream ruleStream; - ruleStream.Open( *iDataBuffer ); - CleanupClosePushL( ruleStream ); - - CCmFillRuleContainer* ruleContainer = - Server().FillRuleContainerL(); - CleanupStack::PushL( ruleContainer ); - ruleContainer->ExternalizeL( ruleStream ); - CleanupStack::PopAndDestroy( ruleContainer ); - - TInt size = iDataBuffer->Size(); - TPckg pckg( size ); - aMessage.WriteL(0, pckg ); - CleanupStack::PopAndDestroy( &ruleStream ); - - TRACE(Print(_L("[Cm Server]\t buffer size is %d"), size)); - - aMessage.Complete( KErrNone ); - LOG(_L("[Cm Server]\t ECmGetFillRulesSize request end")); - - break; - } - - case ECmGetStoreItemsSize: - { - LOG(_L("[Cm Server]\t ECmGetStoreItemsSize request")); - - TInt len = aMessage.GetDesLength( 0 ); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmGetStoreItemsSize request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - HBufC8* name = HBufC8::NewLC( len ); - TPtr8 ptr( name->Des() ); - aMessage.ReadL(0, ptr); - - iDbManager.PrepareQueryCmdL( EStoreFilesQuery ); - RPointerArray items; - CleanupClosePushL( items ); - - iDbManager.QueryStoreFileListL( - items, - *name, - ECmToBeRemoved | ECmToBeShrinked | ECmKeepOnDevice - ); - - TInt count = items.Count(); - - TRACE(Print(_L("[Cm Server]\t store item array size is %d"), - count)); - - delete iDataBuffer; - iDataBuffer = NULL; - - iDataBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream ruleStream; - ruleStream.Open( *iDataBuffer ); - CleanupClosePushL( ruleStream ); - - for ( TInt i = 0; i < count; i++ ) - { - items[i]->ExternalizeL( ruleStream ); - } - - CleanupStack::PopAndDestroy( &ruleStream ); - items.ResetAndDestroy(); - CleanupStack::PopAndDestroy( &items ); - CleanupStack::PopAndDestroy( name ); - - TInt size = iDataBuffer->Size(); - - TPckg sizePckg( size ); - aMessage.WriteL( 1, sizePckg ); - TRACE(Print(_L("[Cm Server]\t buffer size is %d"), size)); - - TPckg countPckg( count ); - aMessage.WriteL( 2, countPckg ); - TRACE(Print(_L("[Cm Server]\t item count is %d"), count)); - - aMessage.Complete( KErrNone ); - - LOG(_L("[Cm Server]\t ECmGetStoreItemsSize request end")); - - break; - } - - case ECmGetFillItemsSize: - { - LOG(_L("[Cm Server]\t ECmGetFillItemsSize request")); - - TInt len = aMessage.GetDesLength( 0 ); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmGetFillItemsSize request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - HBufC8* name = HBufC8::NewLC( len ); - TPtr8 ptr( name->Des() ); - aMessage.ReadL(0, ptr); - - iDbManager.PrepareQueryCmdL( EFillFilesQuery ); - RPointerArray items; - CleanupClosePushL( items ); - - iDbManager.QueryFillFileListL( - items, - *name, - ECmFilled | ECmToBeFilled | ECmToBeShrinked | ECmLocalCopy - ); - - TInt count = items.Count(); - - TRACE(Print(_L("[Cm Server]\t list item array size is %d"), - count)); - - delete iDataBuffer; - iDataBuffer = NULL; - - iDataBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream ruleStream; - ruleStream.Open( *iDataBuffer ); - CleanupClosePushL( ruleStream ); - - for ( TInt i = 0; i < count; i++ ) - { - items[i]->ExternalizeL( ruleStream ); - } - - CleanupStack::PopAndDestroy( &ruleStream ); - items.ResetAndDestroy(); - CleanupStack::PopAndDestroy( &items ); - CleanupStack::PopAndDestroy( name ); - TInt size = iDataBuffer->Size(); - - TPckg sizePckg( size ); - aMessage.WriteL( 1, sizePckg ); - TRACE(Print(_L("[Cm Server]\t buffer size is %d"), size)); - - TPckg countPckg( count ); - aMessage.WriteL( 2, countPckg ); - TRACE(Print(_L("[Cm Server]\t item count is %d"), count)); - - aMessage.Complete( KErrNone ); - - LOG(_L("[Cm Server]\t ECmGetStoreItemsSize request end")); - - break; - } - - case ECmSetFillRules: - { - LOG(_L("[Cm Server]\t ECmSetFillRules request")); - - TInt len = aMessage.GetDesLength(0); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmSetFillRules request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - TRACE(Print(_L("[Cm Server]\t buffer length is %d"), len)); - - HBufC8* buffer = HBufC8::NewLC(len); - - TPtr8 ptr(buffer->Des()); - aMessage.ReadL(0, ptr); - RDesReadStream stream; - stream.Open(ptr); - CleanupClosePushL(stream); - - CCmFillRuleContainer* tempContainer = - CCmFillRuleContainer::NewLC(); - tempContainer->InternalizeL( stream ); - iDbManager.DeleteAllFillRules(); - for ( TInt i = 0; i < tempContainer->FillRuleCount(); i++ ) - { -#ifdef _DEBUG - TDesC8& name = tempContainer->FillRule( i )->Name(); - TBuf buf; - buf.Copy(name); - TRACE(Print(_L("[Cm Server]\t updating fill rule %S"), &buf)); -#endif - - if ( tempContainer->FillRule( i )->Selected() == ECmDeleted ) - { - TRACE(Print(_L("[Cm Server]\t skipping deleted rule %S"), - &buf)); - iDbManager.SetFillListStateL( - tempContainer->FillRule( i )->ListId(), ECmDeleted ); - } - else - { - TRACE(Print(_L("[Cm Server]\t storing rule %S to db"), - &buf)); - TInt ret = iDbManager.AddFillRuleL( - tempContainer->FillRule( i )); - TRACE(Print(_L("[Cm Server]\t ret = %d"), ret)); - } - } - aMessage.Complete( KErrNone ); - CleanupStack::PopAndDestroy( 3, buffer ); - break; - } - - case ECmPreProcessFillList: - { - LOG(_L("[Cm Server]\t ECmPreProcessFillList request")); - - TInt len = aMessage.GetDesLength( 0 ); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmPreProcessFillList request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - HBufC8* name = HBufC8::NewLC( len ); - TPtr8 ptr( name->Des() ); - aMessage.ReadL(0, ptr); - - TRACE(Print(_L("[Cm Server]\t list name %S"), name )); - - Server().ExecuteServiceL( - ECmServicePreProcessingFilllist, 0, name ); - Server().SetCurrentAsyncMsg( aMessage ); - - CleanupStack::Pop( name ); - break; - } - - case ECmGetSyncTime: - { - LOG(_L("[Cm Server]\t ECmGetSyncTime request")); - TTime syncTime; - TInt err = iDbManager.GetSyncTime( syncTime ); - TRACE( Print(_L("[Cm Server]\t returning time %ld"), - syncTime.Int64() ) ); - - TPckg pckg( syncTime ); - aMessage.WriteL( 0, pckg ); - aMessage.Complete( err ); - break; - } - - case ECmGetMediaserversSize: - { - LOG(_L("[Cm Server]\t ECmGetMediaserversSize request")); - - iDbManager.PrepareQueryCmdL( EMediaServersAllQuery ); - - delete iDataBuffer; - iDataBuffer = NULL; - - iDataBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream serverStream; - serverStream.Open( *iDataBuffer ); - CleanupClosePushL( serverStream ); - - TInt ret( KErrNone ); - TInt amount = 0; - while( KErrNotFound != ret ) - { - CCmMediaServerFull* server = CCmMediaServerFull::NewLC(); - ret = iDbManager.QueryAllMediaServersL( server ); - if( KErrNotFound != ret ) - { - ++amount; - server->ExternalizeL( serverStream ); - } - CleanupStack::PopAndDestroy( server ); - } - - TInt size = iDataBuffer->Size(); - TPckg pckg( size ); - aMessage.WriteL(0, pckg ); - - TPckg pckg2( amount ); - aMessage.WriteL(1, pckg2 ); - - TRACE(Print(_L("[Cm Server]\t buffer size is %d, amount %d"), - size, amount)); - - aMessage.Complete( KErrNone ); - CleanupStack::PopAndDestroy( &serverStream ); - break; - } - - case ECmGetStoreRulesSize: - { - LOG(_L("[Cm Server]\t ECmGetStoreRulesSize request")); - RPointerArray array; - CleanupClosePushL( array ); - iDbManager.PrepareQueryCmdL( EStoreRuleNamesQuery ); - iDbManager.QueryStoreRuleNamesL( array ); - TRACE(Print(_L("[Cm Server]\t store rule array size is %d"), - array.Count())); - - CCmStoreRuleContainer* ruleContainer = - CCmStoreRuleContainer::NewLC(); - for ( TInt i = 0; i < array.Count(); i++ ) - { - CCmStoreRule* rule = CCmStoreRule::NewLC(); - rule->SetNameL( *(array[i]) ); - iDbManager.PrepareQueryCmdL( EStoreRuleQuery ); - iDbManager.QueryStoreRuleL( rule ); - ruleContainer->AddStoreRuleL( rule ); - CleanupStack::Pop( rule ); - } - - delete iDataBuffer; - iDataBuffer = NULL; - - iDataBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream ruleStream; - ruleStream.Open( *iDataBuffer ); - CleanupClosePushL( ruleStream ); - - ruleContainer->ExternalizeL( ruleStream ); - TInt size = iDataBuffer->Size(); - TPckg pckg( size ); - aMessage.WriteL(0, pckg ); - - TRACE(Print(_L("[Cm Server]\t buffer size is %d"), size)); - - aMessage.Complete( KErrNone ); - CleanupStack::PopAndDestroy( 2, ruleContainer ); - array.Reset(); - CleanupStack::PopAndDestroy( &array ); - LOG(_L("[Cm Server]\t ECmGetStoreRulesSize request end")); - - break; - } - - case ECmSetStoreRules: - { - LOG(_L("[Cm Server]\t ECmSetStoreRules request")); - - TInt len = aMessage.GetDesLength(0); - TInt totalCount(0); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmSetStoreRules request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - TRACE(Print(_L("[Cm Server]\t buffer length is %d"), len)); - - HBufC8* buffer = HBufC8::NewLC(len); - - TPtr8 ptr(buffer->Des()); - aMessage.ReadL(0, ptr); - RDesReadStream stream; - stream.Open(ptr); - CleanupClosePushL(stream); - - CCmStoreRuleContainer* tempContainer = - CCmStoreRuleContainer::NewLC(); - tempContainer->InternalizeL( stream ); - iDbManager.DeleteAllStoreRules(); - for ( TInt i = 0; i < tempContainer->StoreRuleCount(); i++ ) - { - TDesC8& name = tempContainer->StoreRule( i )->Name(); - TBuf buf; - buf.Copy(name); - TRACE(Print(_L("[Cm Server]\t updating store rule %S"), - &buf)); - TInt ret = iDbManager.AddStoreRuleL( - tempContainer->StoreRule( i )); - TRACE(Print(_L("[Cm Server]\t ret = %d"), ret)); - - if( tempContainer->StoreRule( i )->Selected() ) - { - TInt oneRuleCount(0); - iDbManager.GetStoreFileCount( - name, - ECmToBeRemoved | ECmToBeShrinked | ECmKeepOnDevice, - oneRuleCount ); - totalCount += oneRuleCount; - } - } - TInt time (0); - TInt count(0); - iDbManager.GetTransferInfo( ECmServiceStore, count, time ); - iDbManager.UpdateTransferInfo( ECmServiceStore, totalCount, - time ); - - aMessage.Complete( KErrNone ); - - CleanupStack::PopAndDestroy( 3, buffer ); - break; - } - - case ECmSetMediaServers: - { - LOG(_L("[Cm Server]\t ECmSetMediaServers request")); - - TInt mediaServerCount = aMessage.Int1(); - TInt len = aMessage.GetDesLength(0); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmSetMediaServers request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - TRACE(Print(_L("[Cm Server]\t buffer length is %d"), len)); - TRACE(Print(_L("[Cm Server]\t mediaserver count is %d"), - mediaServerCount )); - - HBufC8* buffer = HBufC8::NewLC(len); - - TPtr8 ptr(buffer->Des()); - aMessage.ReadL(0, ptr); - RDesReadStream stream; - stream.Open(ptr); - CleanupClosePushL(stream); - - RPointerArray mediaServers; - CleanupClosePushL( mediaServers); - - for ( TInt i = 0; i < mediaServerCount; i++ ) - { - CCmMediaServerFull* mediaServer = - CCmMediaServerFull::NewLC(); - mediaServer->InternalizeL( stream ); - mediaServers.AppendL( mediaServer ); - CleanupStack::Pop( mediaServer ); - } - TInt ret = iDbManager.SetMediaServersL( mediaServers ); - TRACE(Print(_L("[Cm Server]\t mediaservers update ret = %d"), - ret)); - - aMessage.Complete( ret ); - - mediaServers.ResetAndDestroy(); - CleanupStack::PopAndDestroy( 3 ); //buffer, &stream, &mediaServers - break; - } - - case ECmSetFillFileStatuses: - { - LOG(_L("[Cm Server]\t ECmSetFillFileStatuses request")); - - TInt itemCount = aMessage.Int1(); - TInt len = aMessage.GetDesLength(0); - if( len <= 0 ) - { - LOG(_L("[Cm Server]\t ECmSetFillFileStatuses request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - TRACE(Print(_L("[Cm Server]\t buffer length is %d"), len)); - TRACE(Print(_L("[Cm Server]\t item count is %d"), - itemCount )); - - HBufC8* buffer = HBufC8::NewLC(len); - - TPtr8 ptr(buffer->Des()); - aMessage.ReadL(0, ptr); - RDesReadStream stream; - stream.Open(ptr); - CleanupClosePushL(stream); - - RPointerArray items; - CleanupClosePushL( items ); - - for ( TInt i = 0; i < itemCount; i++ ) - { - CCmBaseListItem* item = CCmBaseListItem::NewLC(); - item->InternalizeL( stream ); - items.AppendL( item ); - CleanupStack::Pop( item ); - } - TInt ret = iDbManager.UpdateStatusValues( items ); - TRACE(Print(_L("[Cm Server]\t fillfile status update ret = %d"), - ret)); - - aMessage.Complete( ret ); - - items.ResetAndDestroy(); - CleanupStack::PopAndDestroy( 3 ); //buffer, &stream, &items - break; - } - - case ECmGetAppWizardState: - { - LOG(_L("[Cm Server]\t ECmGetAppWizardState request")); - - TInt appWizardState( KErrNotFound ); - TInt err; - err = iSettings.GetAppWizardInformation( appWizardState ); - TPckg pckg( appWizardState ); - aMessage.WriteL(0, pckg ); - aMessage.Complete( err ); - break; - } - - case ECmSetAppWizardState: - { - LOG(_L("[Cm Server]\t ECmSetAppWizardState request")); - TInt err; - err = iSettings.SetAppWizardInformation(); - aMessage.Complete( err ); - - break; - } - case ECmUpdateFillLists: - { - LOG(_L("[Cm Server]\t ECmUpdateLists request")); - Server().ExecuteServiceL( - ECmServiceUpdateFillLists, 0, NULL ); - Server().SetCurrentAsyncMsg( aMessage ); - break; - } - case ECmDeleteMetadata: - { - LOG(_L("[Cm Server]\t ECmDeleteMetadata request")); - - Server().ExecuteServiceL( - ECmServiceDeleteMetadata, 0, NULL ); - Server().SetCurrentAsyncMsg( aMessage ); - break; - } - case ECmDeleteDeletedMediaServers: - { - TRAPD( err, iDbManager.DeleteDeletedMediaServersL() ); - aMessage.Complete( err ); - break; - } - case ECmGetDriveSelectionStatus: - { - TInt err( KErrNone ); - TPckg pckg( Server().DriveSelectionStatus() ); - aMessage.WriteL( 0, pckg ); - aMessage.Complete( err ); - break; - } - case ECmSetDrives: - { - LOG(_L("[Cm Server]\t ECmSetDrives request")); - - TInt driveCount = aMessage.Int1(); - TInt len = aMessage.GetDesLength(0); - if( len < 0 ) - { - LOG(_L("[Cm Server]\t ECmSetDrives request \ - leaving with KErrArgument")); - User::Leave( KErrArgument ); - } - TRACE(Print(_L("[Cm Server]\t buffer length is %d"), len)); - TRACE(Print(_L("[Cm Server]\t drive count is %d"), - driveCount )); - - RPointerArray origDrives; - CleanupClosePushL( origDrives ); - - iDbManager.PrepareQueryCmdL( EDrivesQuery ); - TRAPD( ret, iDbManager.QueryDrivesL( origDrives ) ); - TRACE(Print(_L("[Cm Server]\t Query orig drives ret = %d"), - ret )); - - HBufC8* buffer = HBufC8::NewLC(len); - - TPtr8 ptr(buffer->Des()); - aMessage.ReadL(0, ptr); - RDesReadStream stream; - stream.Open(ptr); - CleanupClosePushL(stream); - - RPointerArray drives; - CleanupClosePushL( drives ); - - for ( TInt i = 0; i < driveCount; i++ ) - { - CCmDriveInfo* drive = - CCmDriveInfo::NewLC(); - drive->InternalizeL( stream ); - drives.AppendL( drive ); - } - // Has drive slots changed or has some mmc taken away - TBool driveSelected( EFalse ); - for( TInt j = 0; j < origDrives.Count(); j++ ) - { - for( TInt k = 0; k < drives.Count(); k++ ) - { - if( origDrives[j]->DriveId() == drives[k]->DriveId() ) - { - driveSelected = ETrue; - if( origDrives[j]->DriveNumber() != - drives[k]->DriveNumber() ) - { - // update fill list drive numbers and ids - iDbManager.UpdateFillListDriveStatusesL( - origDrives[j], drives[k], driveSelected ); - } - else - { - // Do nothing, drive still in same slot as - // previously - } - } - } - if( !driveSelected ) - { - // Drive not selected, update fill file list statuses - // Use drive id in update clause - iDbManager.UpdateFillListDriveStatusesL( - origDrives[j], NULL, driveSelected ); - } - driveSelected = EFalse; - } - - TRAP( ret, iDbManager.SetDrivesL( drives ) ); - TRACE(Print(_L("[Cm Server]\t drives update ret = %d"), - ret)); - if( drives.Count() ) - { - Server().SetDriveSelectionStatus( ETrue ); - } - else - { - Server().SetDriveSelectionStatus( EFalse ); - } - aMessage.Complete( ret ); - - CleanupStack::PopAndDestroy( driveCount ); - drives.Reset(); - CleanupStack::PopAndDestroy( &drives ); - CleanupStack::PopAndDestroy( 2, buffer ); - origDrives.ResetAndDestroy(); - CleanupStack::PopAndDestroy( &origDrives ); - // Restart quota listener if needed - TBool mmEnabled( EFalse ); - iSettings.GetMemoryManagerStatus( mmEnabled ); - Server().SetServiceStateL( ECmServiceMemoryManager, - (TCmServiceState)mmEnabled ); - break; - } - case ECmGetDrivesSize: - { - LOG(_L("[Cm Server]\t ECmGetDrivesSize request")); - - iDbManager.PrepareQueryCmdL( EDrivesQuery ); - - delete iDataBuffer; - iDataBuffer = NULL; - - iDataBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream driveStream; - driveStream.Open( *iDataBuffer ); - CleanupClosePushL( driveStream ); - - RPointerArray drives; - CleanupClosePushL( drives ); - iDbManager.QueryDrivesL( drives ); - for( TInt i = 0; i < drives.Count(); i++ ) - { - drives[i]->ExternalizeL( driveStream ); - } - - TInt size = iDataBuffer->Size(); - TPckg pckg( size ); - aMessage.WriteL(0, pckg ); - - TPckg pckg2( drives.Count() ); - aMessage.WriteL(1, pckg2 ); - - TRACE(Print(_L("[Cm Server]\t buffer size is %d, amount %d"), - size, drives.Count() )); - - aMessage.Complete( KErrNone ); - drives.ResetAndDestroy(); - CleanupStack::PopAndDestroy( &drives ); - CleanupStack::PopAndDestroy( &driveStream ); - break; - } - case ECmApplicationExit: - { - LOG(_L("[Cm Server]\t ECmApplicationExit request")); - Server().SetAsyncRequestStateL( EFalse ); - if ( !aMessage.IsNull() ) - { - aMessage.Complete( KErrNone ); - } - break; - } - case ECmGetFilledFilesSize: - { - LOG(_L("[Cm Server]\t ECmGetFilledFilesSize request")); - TInt id = aMessage.Int1(); - TInt64 size = iDbManager.BytesFilled( id ); - TPckg pckg( size ); - - aMessage.WriteL(0, pckg ); - aMessage.Complete( KErrNone ); - - break; - } - default: - { - LOG(_L("[Cm Server]\t default panic with ECmClientBadRequest")); - // Unknown opcode --> panic client - PanicClient( aMessage, ECmClientBadRequest ); - break; - } - } - - // If ServiceL leaves, default implementation in server framework - // completes the RMessage2 with the leave code. - } - -// --------------------------------------------------------------------------- -// PanicClient -// Client panic handler -// RMessage2::Panic() also completes the message. This is: -// (a) important for efficient cleanup within the kernel -// (b) a problem if the message is completed a second time -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CCmSession::PanicClient( const RMessage2& aMessage, TInt aPanic ) const - { - TRACE(Print(_L("[Cm Server]\t PanicClient: Reason = %d\n"), aPanic)); - aMessage.Panic( KCmServerPanic, aPanic ); - } - -// End of File