diff -r 000000000000 -r e686773b3f54 phonebookengines/VirtualPhonebook/VPbkSimServer/src/CVPbkStoreSessionStub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkSimServer/src/CVPbkStoreSessionStub.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,583 @@ +/* +* Copyright (c) 2002-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: A stub version of the class CVPbkStoreSession for emulator. +* The meaning of this stub is to make it possible for the client +* to open a store and a create a view from it. +* +*/ + + + +// INCLUDE FILES +#include "CVPbkStoreSession.h" + +#include +#include "VPbkDebug.h" +#include "VPbkSimServerOpCodes.h" +#include "CVPbkSimServer.h" +#include "SimServerInternal.h" + +// ============================ LOCAL FUNCTIONS ================================ + +/** +* A class for keeping view event notification. Stub doesn't have view +* subsession class so the event must be saved in session class +*/ +struct TViewEventMessageHolder + { + RMessage2 iMessage; + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CVPbkStoreSession +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVPbkStoreSession::CVPbkStoreSession( const CVPbkSimServer& aServer ) +: iServer( const_cast( aServer ) ), + iNewContactBufPtr( NULL, 0 ), + iIsPhoneOpen(EFalse), + iSimIndexesBufPtr( NULL, 0 ) + { + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::ConstructL() + { + iServer.IncreaseNumberOfSessions(); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVPbkStoreSession* CVPbkStoreSession::NewL( + const CVPbkSimServer& aServer ) + { + CVPbkStoreSession* self = + new( ELeave ) CVPbkStoreSession( aServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// Destructor +CVPbkStoreSession::~CVPbkStoreSession() + { + // iLatestSaveCommand pointer is used for saving view event + // notification in the stub. There is no view subsession in + // the stub so it must be saved somewhere. + TViewEventMessageHolder* holder = + (TViewEventMessageHolder*) iLatestSaveCommand; + delete holder; + delete iSubSessionIndex; + + if ( iSubSessionCon ) + { + iServer.RemoveContainer( *iSubSessionCon ); + } + + iServer.DecreaseNumberOfSessions(); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::ServiceL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::ServiceL( const RMessage2& aMessage ) + { + switch ( aMessage.Function() ) + { + case EVPbkSimSrvOpenStore: + { + OpenStoreL( aMessage ); + break; + } + case EVPbkSimSrvCloseStore: + { + CloseStore( aMessage ); + break; + } + case EVPbkSimSrvStoreEventNotification: + { + SaveStoreEventNotification( aMessage ); + break; + } + case EVPbkSimSrvCancelAsyncRequest: + { + CancelRequestL( aMessage ); + break; + } + case EVPbkSimSrvGetSizeAndLoadContact: + { + GetSizeAndLoadContactL( aMessage ); + break; + } + case EVPbkSimSrvGetContact: + { + GetContactL( aMessage ); + break; + } + case EVPbkSimSrvSaveContact: + { + SaveContactL( aMessage ); + break; + } + case EVPbkSimSrvDeleteContact: + { + DeleteContactL( aMessage ); + break; + } + case EVPbkSimSrvGsmStoreProperties: + { + GetGsmStorePropertiesL( aMessage ); + break; + } + case EVPbkSimSrvUSimStoreProperties: + { + GetUSimStorePropertiesL( aMessage ); + break; + } + case EVPbkSimSrvMatchPhoneNumber: + { + MatchPhoneNumberL( aMessage ); + break; + } + case EVPbkSimSrvOpenView: + { + CreateViewSubSessionL( aMessage ); + break; + } + case EVPbkSimSrvCloseView: + { + CloseViewSubSessionL( aMessage ); + break; + } + case EVPbkSimSrvChangeViewSortOrder: + { + // Ignore the change sort order event, because there can't be views createad + // from the stubbed store. + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + break; + } + case EVPbkSimSrvViewEventNotification: + { + // iLatestSaveCommand pointer is used for saving view event + // notification in the stub. There is no view subsession in + // the stub so it must be saved somewhere. + if ( !iLatestSaveCommand ) + { + // When this is called first time notify client + // that the view is not available. + TVPbkSimContactEventData event; + event.iEvent = EVPbkSimViewNotAvailable; + TPckg pckg( event ); + aMessage.WriteL( KVPbkSlot0, pckg ); + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + // Create a message holder for next notification message + TViewEventMessageHolder* holder = + new( ELeave ) TViewEventMessageHolder; + iLatestSaveCommand = (VPbkSimServer::CSaveCommand*)holder; + } + else + { + // Client has received the first notification and activates + // it again. Message is saved so that it can be cancelled + // when the view is closed + ((TViewEventMessageHolder*)(iLatestSaveCommand))->iMessage = + aMessage; + } + break; + } + + case EVPbkSimSrvOpenPhone: + { + OpenPhoneL(aMessage); + break; + } + case EVPbkSimSrvClosePhone: + { + ClosePhoneL(aMessage); + break; + } + case EVPbkSimSrvUSimAccessSupported: + { + GetUSimAccessSupportL(aMessage); + break; + } + case EVPbkSimSrvServiceTable: + { + GetServiceTableL(aMessage); + break; + } + case EVPbkSimSrvFixedDiallingStatus: + { + GetFDNStatusL(aMessage); + break; + } + + default: + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::ServiceError +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::ServiceError( const RMessage2 &aMessage, TInt aError ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING("VPbkSimServer: ServiceError")); + VPbkSimSrvUtility::CompleteRequest( aMessage, aError ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::StoreReady +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::StoreReady( MVPbkSimCntStore& /*aStore*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::StoreError +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::StoreError( MVPbkSimCntStore& /*aStore*/, + TInt /*aError*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::StoreNotAvailable +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::StoreNotAvailable( MVPbkSimCntStore& /*aStore*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::StoreNotAvailable +// ----------------------------------------------------------------------------- +// +void +CVPbkStoreSession::StoreContactEvent( TEvent /*aEvent*/, TInt /*aSimIndex*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::PhoneOpened +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::PhoneOpened( MVPbkSimPhone& /*aPhone*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::PhoneError +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::PhoneError( MVPbkSimPhone& /*aPhone*/, + TErrorIdentifier /*aIdentifier*/, TInt /*aError*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::ServiceTableUpdated +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::ServiceTableUpdated( TUint32 /*aServiceTable*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CreateL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::CreateL() + { + iSubSessionCon = iServer.NewContainerL(); + iSubSessionIndex = CObjectIx::NewL(); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::OpenStoreL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::OpenStoreL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CloseStore +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::CloseStore( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CreateViewSubSessionL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::CreateViewSubSessionL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CloseViewSubSessionL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::CloseViewSubSessionL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::SaveStoreEventNotification +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::SaveStoreEventNotification( const RMessage2& aMessage ) + { + iStoreEventMsg = aMessage; + if (!iIsPhoneOpen) + { + iIsPhoneOpen = ETrue; + TVPbkSimContactEventData event; + event.iEvent = EVPbkSimPhoneOpen; + event.iData = KErrNotFound; + event.iOpData = KErrNone; + CompleteNotificationMessage( iStoreEventMsg, event, KErrNone ); + } + // iStore pointer is used to check if this function has been called before. + // This is necessary in the stub because client keeps listening to store + // events and completing request every time would cause a loop + else if ( !iStore ) + { + iStore = (MVPbkSimCntStore*)0xffffffff; + TVPbkSimContactEventData event; + event.iEvent = EVPbkSimStoreNotAvailable; + event.iData = KErrNotFound; + event.iOpData = KErrNone; + CompleteNotificationMessage( iStoreEventMsg, event, KErrNone ); + } + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CancelRequestL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::CancelRequestL( const RMessage2& aMessage ) + { + TInt opCode = KErrUnknown; + TPckg pckg( opCode ); + aMessage.ReadL( KVPbkSlot0, pckg ); + + if ( opCode == EVPbkSimSrvStoreEventNotification ) + { + CancelStoreEventNotification(); + } + else if ( opCode == EVPbkSimSrvViewEventNotification && + iLatestSaveCommand ) + { + // iLatestSaveCommand is used to keep view event notification message + // in the stub because there is no view subsession. + TViewEventMessageHolder* holder = + (TViewEventMessageHolder*) iLatestSaveCommand; + if ( holder->iMessage.Handle() ) + { + VPbkSimSrvUtility::CompleteRequest( holder->iMessage, KErrCancel ); + } + } + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::GetSizeAndLoadContactL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::GetSizeAndLoadContactL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::GetContactL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::GetContactL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::SaveContactL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::SaveContactL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::DeleteContactL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::DeleteContactL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::GetGsmStorePropertiesL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::GetGsmStorePropertiesL( const RMessage2& aMessage ) + { + TVPbkGsmStoreProperty gsmProp; + gsmProp.iCaps = 0; + gsmProp.iMaxNumLength = KErrNotSupported; + gsmProp.iMaxTextLength = KErrNotSupported; + gsmProp.iTotalEntries = KErrNotSupported; + gsmProp.iUsedEntries = KErrNotSupported; + TPckg pckg( gsmProp ); + aMessage.WriteL( KVPbkSlot0, pckg ); + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::GetUSimStorePropertiesL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::GetUSimStorePropertiesL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::MatchPhoneNumberL +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::MatchPhoneNumberL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +/// Opens the phone +void CVPbkStoreSession::OpenPhoneL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +/// Closes the phone +void CVPbkStoreSession::ClosePhoneL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNone ); + } + +/// Gets the usim access support state +void CVPbkStoreSession::GetUSimAccessSupportL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +/// Gets the service table +void CVPbkStoreSession::GetServiceTableL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +/// Gets the fixed dialling status +void CVPbkStoreSession::GetFDNStatusL( const RMessage2& aMessage ) + { + VPbkSimSrvUtility::CompleteRequest( aMessage, KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::GetViewOrLeaveL +// ----------------------------------------------------------------------------- +// +CVPbkViewSubSession& CVPbkStoreSession::GetViewOrLeaveL( TInt /*aViewHandle*/ ) + { + // only make it compile + CVPbkViewSubSession* view = NULL; + return *view; + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CompleteNotificationMessage +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::CompleteNotificationMessage( const RMessage2& aMsg, + TVPbkSimContactEventData& aEventData, TInt aResult ) + { + if (aMsg.Handle()) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimServer: complete store notification event %d data %d opdata %d"), + aEventData.iEvent,aEventData.iData,aEventData.iOpData ); + TPckg pckg( aEventData ); + TInt result = aMsg.Write( KVPbkSlot0, pckg ); + if ( result != KErrNone ) + { + VPbkSimSrvUtility::CompleteRequest( aMsg, result ); + } + else + { + VPbkSimSrvUtility::CompleteRequest( aMsg, aResult ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::CancelStoreEventNotification +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::CancelStoreEventNotification() + { + if ( iStoreEventMsg.Handle() ) + { + VPbkSimSrvUtility::CompleteRequest( iStoreEventMsg, KErrCancel ); + } + } + +// ----------------------------------------------------------------------------- +// CVPbkStoreSession::FixedDiallingStatusChanged +// ----------------------------------------------------------------------------- +// +void CVPbkStoreSession::FixedDiallingStatusChanged( + TInt /*aFDNStatus*/ ) + { + } + +// End of File