phonebookengines/VirtualPhonebook/VPbkSimServer/src/CVPbkStoreSessionStub.cpp
changeset 0 e686773b3f54
--- /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