psmservices/psmserver/src/server/psmsrvsession.cpp
branchRCL_3
changeset 61 8cb079868133
parent 60 ccb4f6b3db21
--- a/psmservices/psmserver/src/server/psmsrvsession.cpp	Tue Aug 31 16:29:05 2010 +0300
+++ b/psmservices/psmserver/src/server/psmsrvsession.cpp	Wed Sep 01 12:34:26 2010 +0100
@@ -14,8 +14,7 @@
 * Description:  PSM Server session
 *
 */
-#include <centralrepository.h>
-#include <psmsrvdomaincrkeys.h>
+
 #include <e32property.h>
 #include <connect/sbdefs.h>
 #include <psmsettingsprovider.h>
@@ -112,6 +111,9 @@
         COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::~CPsmSession - No pending requests") ) );
         }
 
+    // Reset and close config array
+    iConfigArray.Reset();
+    iConfigArray.Close();
 
     COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::~CPsmSession - return") ) );
     }
@@ -123,28 +125,41 @@
 void CPsmSession::ServiceL( const RMessage2& aMessage )
     {
     COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::ServiceL()" ) ) );
+
+    TRAPD( error, DispatchL( aMessage ) );
+
+    // Complete message with error code if there were errors
+    if ( KErrNone != error )
+        {
+        COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::ServiceL() - Error: %i" ), error ) );
+        aMessage.Complete( error );
+        }
+
+    COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::ServiceL - return" ) ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CPsmSession::DispatchL
+// -----------------------------------------------------------------------------
+//
+void CPsmSession::DispatchL( const RMessage2& aMessage )
+    {
+    COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::DispatchL()" ) ) );
+
     switch ( aMessage.Function() )
         {
         case EPsmServerNotifyModeChange: // For power save mode change
             {
             TInt mode = aMessage.Int0();
-			if ( !iNotifyModeMessage )
-				{
-				// Create message wrapper if not yet created
-				CPsmMessage* notifyModeMessage = CPsmMessage::NewL( iPsmManager );
-				CleanupStack::PushL(notifyModeMessage);
-				iPsmManager.RegisterObserverL( notifyModeMessage );
-				CleanupStack::Pop(notifyModeMessage);
-				iNotifyModeMessage = notifyModeMessage;
-				}
-				
-			//Check whether the mode is already set .
-			TInt cenrepMode( 0 );
-			CRepository* cenrep = CRepository::NewLC( KCRUidPowerSaveMode );
-			User::LeaveIfError(cenrep->Get( KPsmCurrentMode, cenrepMode ));
-			CleanupStack::PopAndDestroy( cenrep );
-			// Check that mode to be set is valid, otherwise error code.
-            if( mode == cenrepMode )
+            if ( !iNotifyModeMessage )
+                {
+                // Create message wrapper if not yet created
+                iNotifyModeMessage = CPsmMessage::NewL( iPsmManager );
+                iPsmManager.RegisterObserver( iNotifyModeMessage );
+                }
+
+            // Check that mode to be set is valid, otherwise error code.
+            if( mode == iPsmManager.SettingsProvider().Mode() )
                 {
                 User::Leave( KErrAlreadyExists );
                 }
@@ -173,6 +188,12 @@
         case EPsmServerGetSettings: // For PSM settings
         case EPsmServerBackupSettings: // For PSM settings
             {
+            // Check previous config
+            if ( iConfigArray.Count() > 0 )
+                {
+                iConfigArray.Reset();
+                }
+
             // Handle settings requests in different function
             HandleSettingsRequestL( aMessage );
             break;
@@ -203,11 +224,8 @@
             if ( !iNotifyModeMessage )
                 {
                 // Create message wrapper if not yet created
-                CPsmMessage* notifyModeMessage = CPsmMessage::NewL( iPsmManager );
-				CleanupStack::PushL(notifyModeMessage);
-				iPsmManager.RegisterObserverL( notifyModeMessage );
-				CleanupStack::Pop(notifyModeMessage);
-				iNotifyModeMessage = notifyModeMessage;
+                iNotifyModeMessage = CPsmMessage::NewL( iPsmManager );
+                iPsmManager.RegisterObserver( iNotifyModeMessage );
                 }
             iNotifyModeMessage->Initialize( aMessage );
             break;
@@ -229,79 +247,17 @@
             aMessage.Complete( KErrNone );
             break;
             }
-#ifdef _DEBUG    
-        case EDebugHeapMark:
-            {        
-            COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession - EDebugMarkHeap: Alloc Cells: %d."), User::CountAllocCells()));            
-            __UHEAP_MARK;
-            aMessage.Complete(KErrNone);
-            break;
-            }
-            
-        case EDebugHeapMarkEnd:
-            {
-            COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession - EDebugMarkHeapEnd: Alloc Cells: %d."), User::CountAllocCells()));
-            if ( iNotifyModeMessage )
-                {
-                // Unregister observer from manager
-                iPsmManager.UnregisterObserver( iNotifyModeMessage );
-                // Compress the observer array
-                iPsmManager.CompressModeObserversArray();
-                // Finally delete message
-                delete iNotifyModeMessage;
-                iNotifyModeMessage = NULL;
-                }
-            iPsmManager.ClosePluginLoader();
-            __UHEAP_MARKEND;
-            aMessage.Complete(KErrNone);
-            break;
-            }
-            
-        case EDebugSetHeapFailure:
-            {
-            COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession - EDebugSetHeapFailure: Value of Failure Rate: %d."), aMessage.Int0()));            
-            __UHEAP_SETFAIL(RAllocator::EFailNext,aMessage.Int0());
-            aMessage.Complete(KErrNone);
-            break;
-            }
-            
-        case EDebugHeapReset:
-            {
-            COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession - EDebugHeapReset ")));            
-            __UHEAP_RESET;
-            aMessage.Complete(KErrNone);
-            break;
-            }            
-#endif
         default:
             {
             COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::ServiceL() - unknown request: %i - ERROR" ), aMessage.Function() ) );
             User::Leave( KErrUnknown );
             }
         }
-    COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::ServiceL - return" ) ) );
+
+    COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::DispatchL - return" ) ) );
     }
 
 // -----------------------------------------------------------------------------
-// CPsmSession::ServiceError
-// -----------------------------------------------------------------------------
-//
-void CPsmSession::ServiceError(const RMessage2 &aMessage, TInt aError)
-    {
-    // Complete message with error code if there were errors
-    COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::ServiceError() - Error: %i" ), aError ) );
-    if (iNotifyModeMessage && (aMessage.Handle() == iNotifyModeMessage->MessageHandle()) )
-        {
-        iNotifyModeMessage->Complete( aError );           
-        }
-    else
-        {
-        aMessage.Complete( aError );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
 // CPsmSession::HandleSettingsRequestL
 // -----------------------------------------------------------------------------
 //
@@ -309,62 +265,37 @@
     {
     COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::HandleSettingsRequestL()" ) ) );
 
-    RConfigInfoArray configArray;
-    CleanupClosePushL(configArray);
     // read config array from message
-    ReadConfigArrayL( configArray, aMessage );
+    ReadConfigArrayL( iConfigArray, aMessage );
     // Get storage UID
     TUint32 storage = aMessage.Int2();
 
     TInt err( KErrNone );
 
-    switch ( aMessage.Function() )
+    if ( aMessage.Function() == EPsmServerBackupSettings )
         {
-        case EPsmServerBackupSettings: // For server backup settings
-            {
-            iPsmManager.SettingsProvider().BackupSettingsL( configArray, storage );
-            break;
-            }
-        case EPsmServerGetSettings: // For getting server settingspower save mode change
+        iPsmManager.SettingsProvider().BackupSettingsL( iConfigArray, storage );
+        }
+    else 
+        {
+        if ( aMessage.Function() == EPsmServerGetSettings )
             {
-            iPsmManager.SettingsProvider().GetSettingsL( configArray, storage );
-            // check whether the configArray is empty before writing the value back to message.
-            if(configArray.Count() > 0)
-                {
-                // write changed values back to message
-                TInt arraySize( configArray.Count() * sizeof( TPsmsrvConfigInfo ) );
-                TPtr8 arrayPtr( reinterpret_cast<TUint8*>(&configArray[0]), arraySize, arraySize );
-                err = aMessage.Write( 0, arrayPtr );
-                COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::HandleSettingsRequestL - New data wrote to message: %i" ), err ) );
-                }
-            else
-                {
-                ERROR_TRACE( ( _L( "PSM Server - CPsmSession::HandleSettingsRequestL - Config Array is Empty" )) );
-                }
-            break;
+            iPsmManager.SettingsProvider().GetSettingsL( iConfigArray, storage );
+            }
+        else
+            {
+            // EPsmServerChangeSettings
+            iPsmManager.SettingsProvider().BackupAndGetSettingsL( iConfigArray, storage );
             }
-        case EPsmServerChangeSettings: // For changing the settings
-            {
-            // We have to write changed values back to message
-            iPsmManager.SettingsProvider().BackupAndGetSettingsL( configArray, storage );
-            // We have to write changed values back to message
-            TInt arraySize( configArray.Count() * sizeof( TPsmsrvConfigInfo ) );
-            TPtr8 arrayPtr( reinterpret_cast<TUint8*>(&configArray[0]), arraySize, arraySize );
-            err = aMessage.Write( 0, arrayPtr );
-            ERROR_TRACE( ( _L( "PSM Server - CPsmSession::HandleSettingsRequestL - New data wrote to message: %i" ), err ) );
-            break;
-            }
-        default:
-            {
-            COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::HandleSettingsRequestL() - unknown request: %i - ERROR" ), aMessage.Function() ) );
-            User::Leave( KErrUnknown );
-            }
+
+        // We have to write changed values back to message
+        TInt arraySize( iConfigArray.Count() * sizeof( TPsmsrvConfigInfo ) );
+        TPtr8 arrayPtr( reinterpret_cast<TUint8*>(&iConfigArray[0]), arraySize, arraySize );
+        err = aMessage.Write( 0, arrayPtr );
+        ERROR_TRACE( ( _L( "PSM Server - CPsmSession::HandleSettingsRequestL - New data wrote to message: %i" ), err ) );
         }
     // Complete message before destroying local config array
     aMessage.Complete( err );
-			
-    CleanupStack::PopAndDestroy(&configArray);
-
     COMPONENT_TRACE( ( _L( "PSM Server - CPsmSession::HandleSettingsRequestL - return" ) ) );
     }
 
@@ -379,8 +310,10 @@
     const TInt configCount( aMessage.Int1() );
     TInt arrayLength( configCount * sizeof( TPsmsrvConfigInfo ) );
 
-    aArray.ReserveL(configCount);    
-    //Fill the array with dummy items
+    // There is no ResizeL() for RArray
+    // ReserveL() does not change iCount, which will
+    // result array[0] failure (access beyond array index)
+    // That is why we fill the array with dummy items
     for(TInt x = 0; x < configCount; ++x )
     	{
         // Append empty config infos to array