diff -r 844b978f8d5e -r b7904b40483f contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp --- a/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp Thu Jan 07 12:55:39 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp Mon Jan 18 20:32:13 2010 +0200 @@ -713,6 +713,148 @@ } // ----------------------------------------------------------------------------- +// CHsCcApiClient::ActiveViewL +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::ActiveViewL( CHsContentInfo& aInfo ) + { + TInt err( KErrNone ); + + // Create ActiveViewReq API request + CCcSrvMsg* reqMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( reqMsg ); + reqMsg->SetMsgId( EHsCcActiveViewReq ); + reqMsg->SetTrId( 0 ); + reqMsg->SetData( KNullDesC8() ); + + // Marshal API request + HBufC8* msgBuf = reqMsg->MarshalL(); + CleanupStack::PushL( msgBuf ); + TPtr8 msgPtr( NULL, 0 ); + msgPtr.Set( msgBuf->Des() ); + + // Send API request + // Sender and receiver address not defined -> message is routed + // according to the provider id + TPckgBuf provider( ECcHomescreen ); + TPckgBuf sender; + TPckgBuf receiver; + err = iSession.Send( ECcApiReq, provider, sender, receiver, msgPtr ); + + if ( !err ) + { + // Internalize AppListResp API response + CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( respMsg ); + RDesReadStream respStream( msgPtr ); + CleanupClosePushL( respStream ); + respMsg->InternalizeHeaderL( respStream ); + CleanupStack::PopAndDestroy( &respStream ); + err = respMsg->Status(); + if ( !err ) + { + if ( respMsg->DataSize() ) + { + // Get API response data + HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + TPckgBuf trId( respMsg->TrId() ); + err = iSession.GetMsgData( trId, dataPtr ); + if ( !err ) + { + // Internalize API response data + RDesReadStream dataStream( dataPtr ); + CleanupClosePushL( dataStream ); + aInfo.InternalizeL( dataStream ); + CleanupStack::PopAndDestroy( &dataStream ); + } + CleanupStack::PopAndDestroy( dataBuf ); + } + } + CleanupStack::PopAndDestroy( respMsg ); + } + + // Cleanup + CleanupStack::PopAndDestroy( msgBuf ); + CleanupStack::PopAndDestroy( reqMsg ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CHsCcApiClient::ActiveAppL +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::ActiveAppL( CHsContentInfo& aInfo ) + { + TInt err( KErrNone ); + + // Create ActiveViewReq API request + CCcSrvMsg* reqMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( reqMsg ); + reqMsg->SetMsgId( EHsCcActiveAppReq ); + reqMsg->SetTrId( 0 ); + reqMsg->SetData( KNullDesC8() ); + + // Marshal API request + HBufC8* msgBuf = reqMsg->MarshalL(); + CleanupStack::PushL( msgBuf ); + TPtr8 msgPtr( NULL, 0 ); + msgPtr.Set( msgBuf->Des() ); + + // Send API request + // Sender and receiver address not defined -> message is routed + // according to the provider id + TPckgBuf provider( ECcHomescreen ); + TPckgBuf sender; + TPckgBuf receiver; + err = iSession.Send( ECcApiReq, provider, sender, receiver, msgPtr ); + + if ( !err ) + { + // Internalize AppListResp API response + CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( respMsg ); + RDesReadStream respStream( msgPtr ); + CleanupClosePushL( respStream ); + respMsg->InternalizeHeaderL( respStream ); + CleanupStack::PopAndDestroy( &respStream ); + err = respMsg->Status(); + if ( !err ) + { + if ( respMsg->DataSize() ) + { + // Get API response data + HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + TPckgBuf trId( respMsg->TrId() ); + err = iSession.GetMsgData( trId, dataPtr ); + if ( !err ) + { + // Internalize API response data + RDesReadStream dataStream( dataPtr ); + CleanupClosePushL( dataStream ); + aInfo.InternalizeL( dataStream ); + CleanupStack::PopAndDestroy( &dataStream ); + } + CleanupStack::PopAndDestroy( dataBuf ); + } + } + CleanupStack::PopAndDestroy( respMsg ); + } + + // Cleanup + CleanupStack::PopAndDestroy( msgBuf ); + CleanupStack::PopAndDestroy( reqMsg ); + + return err; + } + +// ----------------------------------------------------------------------------- // CHsCcApiClient::WaitForApiNtfL() // ----------------------------------------------------------------------------- //