contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp
branchRCL_3
changeset 19 edd621764147
parent 16 b276298d5729
child 23 ace62b58f4b2
--- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp	Tue Apr 27 16:57:49 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp	Tue May 11 16:30:05 2010 +0300
@@ -42,9 +42,9 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CCPServerSession* CCPServerSession::NewL( TPointersForSession& aPasser )
+CCPServerSession* CCPServerSession::NewL(TPointersForSession& aPasser)
     {
-    CCPServerSession* self = CCPServerSession::NewLC( aPasser );
+    CCPServerSession* self = CCPServerSession::NewLC(aPasser);
     CleanupStack::Pop( self ) ;
     return self;
     }
@@ -54,9 +54,9 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CCPServerSession* CCPServerSession::NewLC( TPointersForSession& aPasser )
+CCPServerSession* CCPServerSession::NewLC(TPointersForSession& aPasser)
     {
-    CCPServerSession* self = new ( ELeave ) CCPServerSession();
+    CCPServerSession* self = new (ELeave) CCPServerSession();
     CleanupStack::PushL( self );
     self->ConstructL( aPasser ) ;
     return self;
@@ -129,12 +129,18 @@
     else
         {
         TInt err(KErrNone);
-        TBool panicedClient(EFalse);
-        TRAP( err , DispatchMessageL( aMessage, panicedClient ) );
+        TBool completeRequest( ETrue ); 
+        //complete request by default
+        //not applicable when client panicked or 
+        //in case of ECpServerExecuteMultipleActions
+        TRAP( err , DispatchMessageL( aMessage, completeRequest ) );
         if ( (!(aMessage.Function( ) == ECpServerRegisterObserver ) 
-            || err == KErrInUse) && !panicedClient )
+            || err == KErrInUse) && completeRequest )
             {
-            aMessage.Complete( err );
+            if( !aMessage.IsNull() ) 
+                {
+                aMessage.Complete( err );
+                }
             }
         }
     }
@@ -144,7 +150,8 @@
 // Handle client requests.
 // -----------------------------------------------------------------------------
 //
-void CCPServerSession::DispatchMessageL( const RMessage2& aMessage, TBool& aPanicedClient )
+void CCPServerSession::DispatchMessageL( const RMessage2& aMessage, 
+                                         TBool& aCompleteRequest )
     {
     CP_DEBUG( _L8("CCPServerSession::DispatchMessageL()" ) );
     switch ( aMessage.Function( ) )
@@ -184,10 +191,11 @@
             break;
         case ECpServerExecuteMultipleActions:
             ExecuteMultipleActionsL( aMessage );
+            aCompleteRequest = EFalse;
             break;
         default:
             iServer->PanicClient( aMessage, ECPServerBadRequest );
-            aPanicedClient = ETrue;
+            aCompleteRequest = EFalse;
             break;
         }
     }
@@ -325,13 +333,14 @@
     
     CLiwGenericParamList* genericList = UnpackForMultiExecuteLC(aMessage);
     TUint options = static_cast<TUint> (aMessage.Int2()); // 2 == KOptionsPosition
-
+    //complete message in order to unblock HS
+    aMessage.Complete( KErrNone );
+    
     const TLiwGenericParam* param = NULL;
     TInt pos(0);
     param = genericList->FindFirst(pos, KFilters);
     const CLiwList* maps = param->Value().AsList();
     CLiwDefaultList* cpMaps = CheckValidityLC(maps);
-    
     //execute actions
     for (TInt i = 0; i < cpMaps->Count(); i++)
         {
@@ -387,7 +396,7 @@
         if ( !iNotificationHandler )
             {
             iNotificationHandler = CCPNotificationHandler::NewL(
-                                               iServer->GetNotifications());
+                    iServer->GetNotifications(), iServer->GetDataMapCache());
             iDataManager->AddObserverL( iNotificationHandler );
             }
         iNotificationHandler->SaveMessageL( aMessage );