contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp
branchRCL_3
changeset 18 bd874ee5e5e2
parent 2 b7904b40483f
child 59 a0713522ab97
--- a/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp	Fri Feb 19 23:07:29 2010 +0200
+++ b/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp	Fri Mar 12 15:43:54 2010 +0200
@@ -102,12 +102,32 @@
 void CHsCcProviderClient::RunL()
     {
     
-    if ( !iStatus.Int() )
+    TInt err( iStatus.Int() );
+    HBufC8* header( NULL );
+    TPtr8 headerPtr( NULL, 0 );
+    TUint32 sender( 0 );
+    TUint32 receiver( 0 );
+    if ( !err )
+        {
+        // Read API request header
+        header = iApiHeader->AllocL();
+        CleanupStack::PushL( header );
+        headerPtr.Set( header->Des() );
+        // Read sender
+        sender = iPckgSender();
+        // Read receiver
+        receiver = iPckgReceiver();
+        }
+    
+    // Receive next API request
+    WaitForApiReqL();
+
+    if ( !err )
         {
         // Get received message header
         CCcSrvMsg* message = CCcSrvMsg::NewL();
         CleanupStack::PushL( message );
-        RDesReadStream stream( iApiHeaderPtr );
+        RDesReadStream stream( headerPtr );
         CleanupClosePushL( stream );
         message->InternalizeHeaderL( stream );
         CleanupStack::PopAndDestroy( &stream );
@@ -127,54 +147,54 @@
         switch ( message->MsgId() )
             {
             case ECcRegisterObserverNtf:
-                HandleRegisterObserverNtfL( *message );
+                HandleRegisterObserverNtfL( sender, receiver, *message );
                 break;
             case ECcUnregisterObserverNtf:
-                HandleUnregisterObserverNtfL( *message );
+                HandleUnregisterObserverNtfL( sender, receiver, *message );
                 break;
             case EHsCcWidgetListReq:
-                HandleWidgetListReqL( *message );
+                HandleWidgetListReqL( sender, receiver, *message );
                 break;
             case EHsCcAddWidgetReq:
-                HandleAddWidgetReqL( *message );
+                HandleAddWidgetReqL( sender, receiver, *message );
                 break;
             case EHsCcRemoveWidgetReq:
-                HandleRemoveWidgetReqL( *message );
+                HandleRemoveWidgetReqL( sender, receiver, *message );
                 break;
             case EHsCcViewListReq:
-                HandleViewListReqL( *message );
+                HandleViewListReqL( sender, receiver, *message );
                 break;
             case EHsCcAddViewReq:
-                HandleAddViewReqL( *message );
+                HandleAddViewReqL( sender, receiver, *message );
                 break;
             case EHsCcRemoveViewReq:
-                HandleRemoveViewReqL( *message );
+                HandleRemoveViewReqL( sender, receiver, *message );
                 break;
             case EHsCcActivateViewReq:
-                HandleActivateViewReqL( *message );
+                HandleActivateViewReqL( sender, receiver, *message );
                 break;
             case EHsCcAppListReq:
-                HandleAppListReqL( *message );
+                HandleAppListReqL( sender, receiver, *message );
                 break;
             case EHsCcActivateAppReq:
-                HandleActivateAppReqL( *message );
+                HandleActivateAppReqL( sender, receiver, *message );
                 break;
             case EHsCcActiveAppReq:
-                HandleActiveAppReqL( *message );
+                HandleActiveAppReqL( sender, receiver, *message );
                 break;
             case EHsCcActiveViewReq:
-                HandleActiveViewReqL( *message );
+                HandleActiveViewReqL( sender, receiver, *message );
                 break;
             default:
-                HandleNotSupportedReqL( *message );
+                HandleNotSupportedReqL( sender, receiver, *message );
                 break;
             }
         CleanupStack::PopAndDestroy( message );
         }
-    
-    // Receive next API request
-    WaitForApiReqL();
-    
+    if ( header )
+        {
+        CleanupStack::PopAndDestroy( header );
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -255,6 +275,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleRegisterObserverNtfL(
+    TUint32 /* aSender */,
+    TUint32 /* aReceiver */,
     CCcSrvMsg& /* aMessage */ )
     {
     TUint32 observer = iPckgSender();
@@ -266,6 +288,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleUnregisterObserverNtfL(
+    TUint32 /* aSender */,
+    TUint32 /* aReceiver */,
     CCcSrvMsg& /* aMessage */ )
     {
     TUint32 observer = iPckgSender();
@@ -284,12 +308,36 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleWidgetListReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
+    
+    TInt err( KErrNone );
     // Get widget list
     CHsContentInfoArray* widgets = CHsContentInfoArray::NewL();
     CleanupStack::PushL( widgets );
-    TInt err = iController.WidgetListL( *widgets );
+    
+    if ( aMessage.DataSize() )
+        {
+        // Internalize message data
+        RDesReadStream dataStream( aMessage.Data() );
+        CleanupClosePushL( dataStream );
+        CHsContentInfo* info = CHsContentInfo::NewL( dataStream );
+        CleanupStack::PopAndDestroy( &dataStream );
+        CleanupStack::PushL( info );
+
+        // Get list of widgets included in the defined 
+        // application configuration or view
+        err = iController.WidgetListL( *info, *widgets );
+        
+        CleanupStack::PopAndDestroy( info );        
+        }
+    else
+        {
+        // Get list of available widgets
+        err = iController.WidgetListL( *widgets );
+        }
 
     // Create and send WidgetListResp 
     CCcSrvMsg* message = CCcSrvMsg::NewL();
@@ -309,7 +357,7 @@
         CleanupStack::PopAndDestroy( dataBuf );
         }
     
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     CleanupStack::PopAndDestroy( widgets );
@@ -321,6 +369,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleAddWidgetReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     TInt err( KErrNone );
@@ -352,7 +402,7 @@
     message->SetStatus( err );
     message->SetData( KNullDesC8() );
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     }
@@ -362,6 +412,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleRemoveWidgetReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     TInt err( KErrNone );
@@ -393,7 +445,7 @@
     message->SetStatus( err );
     message->SetData( KNullDesC8() );
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     }
@@ -403,6 +455,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleViewListReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     // Get view list
@@ -428,7 +482,7 @@
         CleanupStack::PopAndDestroy( dataBuf );
         }
     
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     CleanupStack::PopAndDestroy( views );
@@ -440,6 +494,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleAddViewReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     TInt err( KErrNone );
@@ -471,7 +527,7 @@
     message->SetStatus( err );
     message->SetData( KNullDesC8() );
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     }
@@ -481,6 +537,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleRemoveViewReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     TInt err( KErrNone );
@@ -512,7 +570,7 @@
     message->SetStatus( err );
     message->SetData( KNullDesC8() );
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     }
@@ -522,6 +580,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleActivateViewReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     TInt err( KErrNone );
@@ -553,7 +613,7 @@
     message->SetStatus( err );
     message->SetData( KNullDesC8() );
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     }
@@ -563,6 +623,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleActiveViewReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     // Get active view
@@ -588,7 +650,7 @@
         CleanupStack::PopAndDestroy( dataBuf );
         }
     
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     CleanupStack::PopAndDestroy( view );
@@ -600,6 +662,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleAppListReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     // Get app list
@@ -624,7 +688,7 @@
         CleanupStack::PopAndDestroy( dataBuf );
         }
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     CleanupStack::PopAndDestroy( apps );
@@ -636,6 +700,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleActivateAppReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     TInt err( KErrNone );
@@ -667,7 +733,7 @@
     message->SetStatus( err );
     message->SetData( KNullDesC8() );
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     }
@@ -677,6 +743,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleActiveAppReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     // Get active application info
@@ -702,7 +770,7 @@
         CleanupStack::PopAndDestroy( dataBuf );
         }
     
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
     CleanupStack::PopAndDestroy( app );
@@ -713,6 +781,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleNotSupportedReqL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     // Create and send NotSupportedResp
@@ -723,7 +793,7 @@
     message->SetStatus( KErrNone );
     message->SetData( KNullDesC8() );
 
-    SendRespL( *message );
+    SendRespL( aReceiver, aSender, *message );
     
     CleanupStack::PopAndDestroy( message );    
 
@@ -759,6 +829,8 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::SendRespL(
+    TUint32 aSender,
+    TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
     HBufC8* msgBuf = aMessage.MarshalL();
@@ -767,7 +839,9 @@
     msgPtr.Set( msgBuf->Des() );
 
     TPckgBuf<TUint32> provider( ECcHomescreen );
-    iSession.Send( ECcApiResp, provider, iPckgReceiver, iPckgSender, msgPtr  );
+    TPckgBuf<TUint32> sender( aSender );
+    TPckgBuf<TUint32> receiver( aReceiver );
+    iSession.Send( ECcApiResp, provider, sender, receiver, msgPtr  );
 
     CleanupStack::PopAndDestroy( msgBuf );    
     }