--- a/brandingserver/bsclient/cbsclient.cpp Fri May 28 18:27:27 2010 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,753 +0,0 @@
-/*
-* Copyright (c) 2006 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: CBSClient.cpp
-*
-*/
-
-
-// INCLUDE FILES
-#include "cbsclient.h"
-#include "bsclientdefs.h"
-#include "bsprocessstarter.h"
-#include "bsserverdefs.h"
-#include "mbselement.h"
-#include "bselementfactory.h"
-#include "cbsbitmap.h"
-#include "cbsbrandobserver.h"
-#include <e32base.h>
-#include <s32mem.h>
-#include "debugtrace.h"
-
-// ==============================================================
-// ======================== CLIENT ==============================
-// ==============================================================
-
-// Destructor
-RBSClient::~RBSClient()
- {
-#if _BullseyeCoverage
- cov_write();
-#endif
- }
-
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-RBSClient::RBSClient()
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// RBSClient::Connect()
-// -----------------------------------------------------------------------------
-//
-TInt RBSClient::Connect()
- {
- TRACE( T_LIT("RBSClient::Connect() begin") );
- TFileName fullExePath;
- BSProcessStarter::FullExePathForClienLocation( KBSServerExe,
- fullExePath );
-
- return BSProcessStarter::ConnectToServer( fullExePath,
- KNullDesC,
- NULL,
- *this,
- KBSServerName,
- TVersion( KBSVersionMajor,
- KBSVersionMinor,
- KBSVersionBuild ),
- KBSMsgSlotCount );
- }
-
-
-// -----------------------------------------------------------------------------
-// RBSClient::Close()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::Close()
- {
- TRACE( T_LIT("RBSClient::Close() begin") );
- RSessionBase::Close();
- }
-
-
-// -----------------------------------------------------------------------------
-// RBSClient::Close()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::StartTransactionL( const TDesC8& aApplicationId,
- const TDesC8& aBrandId,
- const TDesC8& aDefaultBrandId,
- TLanguage aLanguage,
- TTransactionType aType,
- TInt aReserved )
- {
- TRACE( T_LIT("RBSClient::StartTransactionL() begin") );
- InitClientL( aApplicationId, aBrandId, aDefaultBrandId,
- aLanguage, aType, aReserved );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::Close()
-// -----------------------------------------------------------------------------
-//
-TInt RBSClient::StopTransactionL( const TDesC8& /*aApplicationId*/,
- const TDesC8& /*aBrandId*/,
- TLanguage /*aLanguage*/,
- TInt /*aReserved*/ )
- {
- TRACE( T_LIT("RBSClient::StopTransactionL() begin") );
- TInt returnValue = 0;
- TPckg<TInt> pack( returnValue );
- TIpcArgs args( &pack );
- TInt err = SendReceive( EBSStopTransaction, args );
- User::LeaveIfError( err );
- return returnValue;
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::Close()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::CancelTransactionL( const TDesC8& aApplicationId,
- const TDesC8& aBrandId,
- TLanguage aLanguage,
- TInt aReserved )
- {
- TIpcArgs args = CreateArgumentsL( aApplicationId, aBrandId,
- aLanguage, aReserved );
-
- TInt err = SendReceive( EBSCancelTransaction, args );
- User::LeaveIfError( err );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::InitClientL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::InitClientL( const TDesC8& aApplicationId,
- const TDesC8& aBrandId,
- const TDesC8& aDefaultBrandId,
- TLanguage aLanguage,
- TTransactionType aType,
- TInt aReserved )
- {
- TRACE( T_LIT("RBSClient::InitClientL() begin aAppId[%S],aBrandId[%S],TAType[%d]"),&aApplicationId,&aBrandId,aType );
- CBufFlat* flatBuf = CBufFlat::NewL( aDefaultBrandId.Length() + aBrandId.Length() + 2 );
- CleanupStack::PushL( flatBuf );
-
- RBufWriteStream stream;
- CleanupClosePushL( stream );
- stream.Open( *flatBuf );
- stream.WriteInt16L( aBrandId.Length() );
- stream.WriteL( aBrandId );
- stream.WriteInt16L( aDefaultBrandId.Length() );
- stream.WriteL( aDefaultBrandId );
-
- TPtr8 ptrElement( flatBuf->Ptr(0) );
-
- // set the arguments for the message
- TIpcArgs args( &aApplicationId );
- args.Set( 1, &ptrElement );
- args.Set( 2, aLanguage );
- args.Set( 3, aReserved );
-
- TInt operation = 0;
- switch( aType )
- {
- case EBSTxInstall:
- {
- operation = EBSInitInstall;
- break;
- }
- case EBSTxUninstall:
- {
- operation = EBSInitUninstall;
- break;
- }
- case EBSTxAppend:
- {
- operation = EBSInitAppend;
- break;
- }
- case EBSTxReplace:
- {
- operation = EBSInitReplace;
- break;
- }
- case EBSTxAccess:
- {
- operation = EBSInitAccess;
- break;
- }
- default:
- {
- User::Leave( KErrArgument );
- break;
- }
- }
- TInt err = SendReceive( operation, args );
- TRACE( T_LIT("RBSClient::InitClientL() 1st SendReceive err=%d"),err );
- CleanupStack::PopAndDestroy( 2, flatBuf ); // stream, flatBuf
-
- User::LeaveIfError( err );
-
- User::LeaveIfError( SendReceive( EBSStartTransaction ) );
- TRACE( T_LIT("RBSClient::InitClientL() end") );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::CreateArgumentsL()
-// -----------------------------------------------------------------------------
-//
-TIpcArgs RBSClient::CreateArgumentsL( const TDesC8& aApplicationId,
- const TDesC8& aBrandId,
- TLanguage aLanguage,
- TInt aReserved )
- {
- // set the arguments for the message
- TIpcArgs args( &aApplicationId );
- args.Set( 1, &aBrandId );
- args.Set( 2, aLanguage );
- args.Set( 3, aReserved );
-
- return args;
- }
-
-
-// -----------------------------------------------------------------------------
-// RBSClient::InsertL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::InsertL( MBSElement* aElement )
- {
- SendUpdateL( aElement, EBSInstall );
- }
-
-
-// -----------------------------------------------------------------------------
-// RBSClient::ReplaceL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::ReplaceL( MBSElement* aElement )
- {
- SendUpdateL( aElement, EBSReplace );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::AppendL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::AppendL( MBSElement* aElement )
- {
- SendUpdateL( aElement, EBSAppend );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::SendUpdateL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::SendUpdateL( MBSElement* aElement, TBSMessages aMessage )
- {
- // FIXME magic number
- CBufFlat* flatBuf = CBufFlat::NewL( 128 );
- CleanupStack::PushL( flatBuf );
-
- RBufWriteStream elementStream;
- CleanupClosePushL( elementStream );
- elementStream.Open( *flatBuf );
-
- aElement->ExternalizeL( elementStream );
-
- TPtr8 ptrElement( flatBuf->Ptr(0) );
- TIpcArgs args( &ptrElement );
-
- TInt err = SendReceive( aMessage, args );
-
- CleanupStack::PopAndDestroy(); // elementStream
- CleanupStack::PopAndDestroy( flatBuf );
- User::LeaveIfError( err );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetTextL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::GetTextL( const TDesC8& aId, HBufC*& aValue )
- {
- TInt size = 0;
- TPckg<TInt> pack( size );
-
- TIpcArgs args( &aId );
- args.Set( 1, &pack );
- TInt err = SendReceive( EBSPrepareText, args );
- User::LeaveIfError( err );
-
- aValue = HBufC::NewL( size );
- TPtr ptrBuf( aValue->Des() );
-
- args.Set( 2, &ptrBuf );
- err = SendReceive( EBSGetText, args );
-
- if( err )
- {
- delete aValue;
- aValue = NULL;
- User::Leave( err );
- }
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetIntL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::GetIntL( const TDesC8& aId, TInt& aValue )
- {
- TPckg<TInt> pack( aValue );
- TIpcArgs args( &aId);
- args.Set( 1, &pack );
- TInt err = SendReceive( EBSGetInt, args );
- User::LeaveIfError( err );
- }
-
-void RBSClient :: isBrandUpdateRequiredL (TInt & aUpdateRequired)
-{
- //TIpcArgs args;
-
- TPckg<TInt> pack (aUpdateRequired);
- //args.Set (0, &pack);
- TInt err = SendReceive (EBSIsBrandUpdateRequired, TIpcArgs (&pack));
-
- User :: LeaveIfError (err);
-}
-// -----------------------------------------------------------------------------
-// RBSClient::GetTextL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::GetBufferL( const TDesC8& aId, HBufC8*& aValue )
- {
- TInt size = 0;
- TPckg<TInt> pack( size );
-
- TIpcArgs args( &aId );
- args.Set( 1, &pack );
- TInt err = SendReceive( EBSPrepareBuffer, args );
- User::LeaveIfError( err );
-
- aValue = HBufC8::NewL( size );
- TPtr8 ptrBuf( aValue->Des() );
-
- args.Set( 2, &ptrBuf );
- err = SendReceive( EBSGetBuffer, args );
-
- if( err )
- {
- delete aValue;
- aValue = NULL;
- User::Leave( err );
- }
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetSeveralL()
-// -----------------------------------------------------------------------------
-//
-MBSElement* RBSClient::GetSeveralL( MDesC8Array& aIds )
- {
- TInt size = 0;
-
- TPckg<TInt> pack( size );
- TIpcArgs args;
- args.Set( 0, &pack );
-
-
- // FIXME magic number
- CBufFlat* flatBuf = CBufFlat::NewL( 128 );
- CleanupStack::PushL( flatBuf );
-
- RBufWriteStream idStream;
- CleanupClosePushL( idStream );
- idStream.Open( *flatBuf );
-
- ExternalizeIdArrayL( idStream, aIds );
-
- TPtr8 flatPtr = flatBuf->Ptr(0);
- args.Set( 1, &flatPtr );
- // get the size of the data
- TInt err = SendReceive( EBSPrepareSeveral, args );
-
- CleanupStack::PopAndDestroy(); // idStream
- CleanupStack::PopAndDestroy( flatBuf );
- User::LeaveIfError( err );
-
- HBufC8* buf = HBufC8::NewLC( size );
- TPtr8 ptrBuf( buf->Des() );
-
- TIpcArgs msgArgs;
- msgArgs.Set( 0, &ptrBuf );
-
- err = SendReceive( EBSGetSeveral, msgArgs );
-
- TInt length = buf->Size();
-
- RDesReadStream readStream;
- CleanupClosePushL( readStream );
- readStream.Open( *buf );
-
- MBSElement* returnValue = InternalizeElementL( readStream );
-
- CleanupStack::PopAndDestroy(); // readStream
- CleanupStack::PopAndDestroy( buf ); // buf
-
- User::LeaveIfError( err );
- return returnValue;
- }
-
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetFileL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::GetFileL( const TDesC8& aId, RFile& aFile )
- {
- TInt fsh;
-
- TPckgBuf<TInt> fh;
-
- TIpcArgs args( &fh );
- args.Set( 2, &aId );
-
- fsh = SendReceive( EBSGetFile, args );
- TInt err = aFile.AdoptFromServer( fsh, fh() );
-
- User::LeaveIfError( err );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetStructureL()
-// -----------------------------------------------------------------------------
-//
-MBSElement* RBSClient::GetStructureL( const TDesC8& aId )
- {
- TInt size = 0;
-
- TPckg<TInt> pack( size );
- TIpcArgs args;
- args.Set( 0, &pack );
-
- args.Set( 1, &aId );
- // get the size of the data
- TInt err = SendReceive( EBSPrepareStructure, args );
-
- User::LeaveIfError( err );
-
-
- HBufC8* buf = HBufC8::NewLC( size );
- TPtr8 ptrBuf( buf->Des() );
-
- TIpcArgs msgArgs;
- msgArgs.Set( 0, &ptrBuf );
-
- err = SendReceive( EBSGetStructure, msgArgs );
-
- TInt length = buf->Size();
-
- RDesReadStream readStream;
- CleanupClosePushL( readStream );
- readStream.Open( *buf );
-
- MBSElement* returnValue = InternalizeElementL( readStream );
- CleanupStack::PopAndDestroy(); // readStream
- CleanupStack::PopAndDestroy( buf ); // buf
-
- User::LeaveIfError( err );
-
- return returnValue;
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::InternalizeElementL()
-// -----------------------------------------------------------------------------
-//
-MBSElement* RBSClient::InternalizeElementL( RReadStream& aStream )
- {
- MBSElement* returnValue= NULL;
- // Write common header for all elements
- TBSElementType type = (TBSElementType)aStream.ReadInt16L();
-
- TInt idSize = aStream.ReadInt16L();
-
- HBufC8* elementId = HBufC8::NewLC( idSize );
- TPtr8 elementIdPtr = elementId->Des();
-
- if( idSize > 0 )
- {
- // read ID only if it's defined
- aStream.ReadL( elementIdPtr, idSize );
- elementIdPtr.SetLength( idSize );// Set length
- }
-
-// Ptr() returns a pointer to the start address of decriptor data,
-// TPtrC constructor then parses the data until null terminator met.
-// This results in wrong descriptor length & bad data!
-// Solution is either
-// 1) to use PtrZ() which appends a zero terminator,
-// or 2) pass to constructor an object that has length data.
-// Option 2) is less prone to errors, so use it.
-// In general, assignment operator with descriptors should be avoided!
-// So use TPtrC16(const TDesC16 &aDes) instead
-// of TPtrC16(const TUint16 *aString)!
- TPtrC8 idPtrC( *elementId );//idPtrC creation moved here so it will be updated correctly.
-
- if( elementId->Length() == 0 )
- {
- CleanupStack::PopAndDestroy( elementId );
- elementId = NULL;
- idPtrC.Set( KNullDesC8 );
- }
-
- // Write element type specific data
- switch( type )
- {
- case EBSInt:
- {
- TInt intData = aStream.ReadInt16L();
- returnValue = BSElementFactory::CreateBSElementL( idPtrC,
- EBSInt,
- intData );
-
- break;
- }
- case EBSText: // flowthrough
- case EBSFile:
- {
- TInt textSize = aStream.ReadInt16L();
- HBufC* textData = HBufC::NewLC( textSize );
-
- TPtr textPtr = textData->Des();
- aStream.ReadL( textPtr, textSize );
-
- returnValue = BSElementFactory::CreateBSElementL( idPtrC,
- type,
- *textData );
- CleanupStack::PopAndDestroy( textData );
- break;
- }
- case EBSList:
- {
- RBSObjOwningPtrArray<MBSElement> listData;
- CleanupClosePushL( listData );
- TInt count = aStream.ReadInt16L();
-
- for( TInt i = 0; i < count; i++ )
- {
- MBSElement* subElement = InternalizeElementL( aStream );
- CleanupClosePushL( *subElement );
- listData.AppendL( subElement );
- CleanupStack::Pop(); // subElement
- }
-
- returnValue = BSElementFactory::CreateBSElementL( idPtrC,
- EBSList,
- listData );
-
- CleanupStack::Pop(); // listData
-
- break;
- }
-
- case EBSBuffer:
- {
- TInt bufferSize = aStream.ReadInt16L();
- HBufC8* buffeData = HBufC8::NewLC( bufferSize );
-
- TPtr8 bufferPtr = buffeData->Des();
- aStream.ReadL( bufferPtr, bufferSize );
-
- returnValue = BSElementFactory::CreateBSElementL( idPtrC,
- EBSBuffer,
- *buffeData );
-
- CleanupStack::PopAndDestroy( buffeData );
- break;
- }
-
- case EBSBitmap:
- {
- TInt length = aStream.ReadInt16L();
- HBufC8* fileId = HBufC8::NewLC( length );
-
- TPtr8 fileIdPtr = fileId->Des();
- aStream.ReadL( fileIdPtr, length );
-
- TInt bitmapId = aStream.ReadInt16L();
- TInt maskId = aStream.ReadInt16L();
- TInt skinId = aStream.ReadInt16L();
- TInt skinMaskId = aStream.ReadInt16L();
-
- CBSBitmap* bitmap = CBSBitmap::NewLC( bitmapId,
- maskId,
- skinId,
- skinMaskId,
- fileIdPtr );
-
- returnValue = BSElementFactory::CreateBSElementL( idPtrC,
- EBSBitmap,
- bitmap );
- CleanupStack::Pop( bitmap ); // bitmap
- CleanupStack::PopAndDestroy( fileId ); // bitmap
-
- break;
- }
-
- default:
- {
- // unknown type!
- User::Leave( KErrCorrupt );
- break;
- }
- }
-
- if( elementId )
- {
- CleanupStack::PopAndDestroy( elementId );
- }
-
- return returnValue;
- }
-
-
-// -----------------------------------------------------------------------------
-// RBSClient::InternalizeElementL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::ExternalizeIdArrayL( RWriteStream& aStream, MDesC8Array& aArray )
- {
- TInt count = aArray.MdcaCount();
- aStream.WriteInt16L( count );
-
- for( TInt i = 0; i < count; i++ )
- {
- TPtrC8 ptr = aArray.MdcaPoint(i);
- aStream.WriteInt16L( aArray.MdcaPoint( i ).Length() );
- aStream.WriteL( aArray.MdcaPoint( i ) );
- }
-
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::RemoveBrandL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::RemoveBrandL( const TDesC8& aApplicationId,
- const TDesC8& aBrandId )
- {
- // set the arguments for the message
- TIpcArgs args( &aApplicationId );
- args.Set( 1, &aBrandId );
- TInt err = SendReceive( EBSRemoveBrand, args );
- User::LeaveIfError( err );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::RemoveBrandsL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::RemoveBrandsL( const TDesC8& aApplicationId )
- {
- // set the arguments for the message
- TIpcArgs args( &aApplicationId );
-
- TInt err = SendReceive( EBSRemoveApplication, args );
- User::LeaveIfError( err );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::RegisterObserverL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::RegisterObserverL( MBSBrandChangeObserver* aObserver, MBSBackupRestoreStateObserver* aBackupStateObserver )
- {
- CBSBrandObserver* tempObserver = CBSBrandObserver::NewL( aObserver, aBackupStateObserver, this );
- if( iObserver )
- {
- delete iObserver;
- }
- iObserver = tempObserver;
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::UnRegisterObserverL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::UnRegisterObserverL( MBSBrandChangeObserver* /*aObserver*/, MBSBackupRestoreStateObserver* /*aBackupStateObserver*/ )
- {
- delete iObserver;
- iObserver = NULL;
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::UnRegisterObserverL()
-// -----------------------------------------------------------------------------
-//
-void RBSClient::RegisterObserverToServerL( TRequestStatus& aStatus )
- {
- TIpcArgs args;
- SendReceive( EBSObserveBrand, args, aStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetNewVersionL()
-// -----------------------------------------------------------------------------
-//
-TInt RBSClient::GetNewVersionL()
- {
- return GetValueL( EBSObserveGetNewVersion);
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetValueL()
-// -----------------------------------------------------------------------------
-//
-TInt RBSClient::GetValueL(TInt msg)
- {
- TInt returnValue = 0;
- TPckg<TInt> pack( returnValue );
- TIpcArgs args( &pack );
- TInt err = SendReceive( msg, args );
- User::LeaveIfError( err );
- return returnValue;
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetBackupStateL()
-// -----------------------------------------------------------------------------
-//
-TInt RBSClient::GetBackupStateL()
- {
- return GetValueL( EBSObserveGetBackupState);
- }
-
-// -----------------------------------------------------------------------------
-// RBSClient::GetBackupRestoreL()
-// -----------------------------------------------------------------------------
-//
-TInt RBSClient::GetBackupRestoreL()
- {
- return GetValueL( EBSObserveGetChange);
- }
-
-// END OF FILE
-