--- /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 <TVPbkSimStoreProperty.h>
+#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<CVPbkSimServer&>( 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<TVPbkSimContactEventData> 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<TInt> 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<TVPbkGsmStoreProperty> 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<TVPbkSimContactEventData> 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