diff -r 0ff24a8f6ca2 -r 98307c651589 memspy/Engine/Source/Helpers/MemSpyEngineHelperECom.cpp --- a/memspy/Engine/Source/Helpers/MemSpyEngineHelperECom.cpp Fri Aug 27 11:37:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,813 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - -#include - -// System includes -#include - -// User includes -#include -#include -#include - -// Literal constants -_LIT8( KMemSpyEComXmlFileMimeType, "text/xml" ); -_LIT8( KMemSpyXmlSpec_MasterSection, "memspy_ecom_sections" ); -_LIT8( KMemSpyXmlSpec_ChildSectionCategory, "category" ); -_LIT8( KMemSpyXmlSpec_ChildSectionCategory_Attribute_Name, "name" ); -_LIT8( KMemSpyXmlSpec_ChildSectionInterface, "interface" ); -_LIT8( KMemSpyXmlSpec_ChildSectionInterface_Name, "name" ); -_LIT8( KMemSpyXmlSpec_ChildSectionInterface_Uid, "uid" ); -_LIT8( KMemSpyXmlSpec_HexPrefix, "0x" ); - - - - - -CMemSpyEngineHelperECom::CMemSpyEngineHelperECom( CMemSpyEngine& aEngine ) -: iEngine( aEngine ) - { - } - - -CMemSpyEngineHelperECom::~CMemSpyEngineHelperECom() - { - iCategories.ResetAndDestroy(); - iCategories.Close(); - // - delete iParser; - delete iConverter; - // - iEComSession.Close(); - REComSession::FinalClose(); - } - - -void CMemSpyEngineHelperECom::ConstructL() - { - TRAPD( err, ConstructInternalL() ); - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructL() - error: %d", err ); - err = err; - } - - -void CMemSpyEngineHelperECom::ConstructInternalL() - { - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructInternalL() - START" ); - iEComSession = REComSession::OpenL(); - - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructInternalL() - creating parser..." ); - iParser = CParser::NewL( KMemSpyEComXmlFileMimeType, *this ); - - // We only convert from UTF-8 to UTF-16 - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructInternalL() - creating charconv object..." ); - iConverter = CCnvCharacterSetConverter::NewL(); - if ( iConverter->PrepareToConvertToOrFromL( KCharacterSetIdentifierUtf8, iEngine.FsSession() ) == CCnvCharacterSetConverter::ENotAvailable ) - { - User::Leave(KErrNotFound); - } - - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructInternalL() - reading xml..." ); - ConstructFromFileL(); - - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructInternalL() - END" ); - } - - -void CMemSpyEngineHelperECom::ConstructFromFileL() - { - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructFromFileL() - START" ); - - // Locate the source file - TRAPD( err, - HBufC* fileName = FindEComXmlFileNameLC(); - ParseL( *fileName ); - CleanupStack::PopAndDestroy( fileName ); - ); - err = err; - - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructFromFileL() - parse error: %d", err ); - - delete iConverter; - iConverter = NULL; - - // Build captions - const TInt categoryCount = iCategories.Count(); - for( TInt i=0; iBuildCaptionL(); - } - - //RDebug::Printf( "CMemSpyEngineHelperECom::ConstructFromFileL() - END" ); - } - - -CMemSpyEngineHelperECom* CMemSpyEngineHelperECom::NewL( CMemSpyEngine& aEngine ) - { - CMemSpyEngineHelperECom* self = new(ELeave) CMemSpyEngineHelperECom( aEngine ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -REComSession& CMemSpyEngineHelperECom::EComSession() - { - return iEComSession; - } - - -EXPORT_C CMemSpyEngineEComCategory& CMemSpyEngineHelperECom::At( TInt aIndex ) - { - return *iCategories[ aIndex ]; - } - - -EXPORT_C TInt CMemSpyEngineHelperECom::IndexOf( const CMemSpyEngineEComCategory& aEntry ) - { - const TInt index = iCategories.Find( &aEntry ); - return index; - } - - -EXPORT_C TInt CMemSpyEngineHelperECom::MdcaCount() const - { - return iCategories.Count(); - } - - -EXPORT_C TPtrC CMemSpyEngineHelperECom::MdcaPoint( TInt aIndex ) const - { - CMemSpyEngineEComCategory* category = iCategories[ aIndex ]; - return category->Caption(); - } - - -HBufC* CMemSpyEngineHelperECom::FindEComXmlFileNameLC() - { - RFs& fsSession = iEngine.FsSession(); - // - TFileName* fileName = new(ELeave) TFileName(); - CleanupStack::PushL( fileName ); - // - fsSession.PrivatePath( *fileName ); - // - TFindFile findFile( fsSession ); - User::LeaveIfError( findFile.FindByPath( KMemSpyEComInterfaceIdFileName, fileName ) ); - // - HBufC* ret = findFile.File().AllocL(); - CleanupStack::PopAndDestroy( fileName ); - CleanupStack::PushL( ret ); - return ret; - } - - -void CMemSpyEngineHelperECom::ConvertL( const TDesC8& aInput, TDes16& aOutput ) - { - const TInt error = iConverter->ConvertToUnicode( aOutput, aInput, iCharconvConverterState ); - User::LeaveIfError( error ); - } - - -void CMemSpyEngineHelperECom::ParseL( const TDesC& aFileName ) - { - Xml::ParseL( *iParser, iEngine.FsSession(), aFileName ); - // - const TInt error = iParserErrorCode; - //RDebug::Printf( "CMemSpyEngineHelperECom::ParseL() - iParserErrorCode: %d", iParserErrorCode ); - iParserErrorCode = KErrNone; - // - User::LeaveIfError( error ); - } - - -void CMemSpyEngineHelperECom::OnChildSectionCategoryL( const RAttributeArray& aAttributes ) - { - TBuf<128> name; - TBool gotName = EFalse; - // - const TInt count = aAttributes.Count(); - for( TInt i=0; i name; - TBool gotName = EFalse; - TBool gotUid = EFalse; - // - const TInt count = aAttributes.Count(); - for( TInt i=0; i= 8 ) - { - TRadix radix = EDecimal; - TPtrC8 pValue( value ); - // - if ( value.Length() == 10 && value.Left( 2 ) == KMemSpyXmlSpec_HexPrefix ) - { - pValue.Set( value.Mid( 2 ) ); - radix = EHex; - } - // - TUint32 uidVal = 0; - TLex8 lexer( pValue ); - const TInt err = lexer.Val( uidVal, radix ); - User::LeaveIfError( err ); - uid.iUid = uidVal; - gotUid = ETrue; - } - } - } - } - // - const TInt catCount = iCategories.Count(); - if ( gotName && gotUid && catCount > 0 ) - { - //RDebug::Print( _L("CMemSpyEngineHelperECom::OnChildSectionInterfaceL() - creating interface for %S [0x%08x]"), &name, uid.iUid ); - - CMemSpyEngineEComCategory* category = iCategories[ catCount - 1 ]; - TRAPD( err, category->CreateInterfaceL( name, uid ) ); - err = err; - //RDebug::Print( _L("CMemSpyEngineHelperECom::OnChildSectionInterfaceL() - error: %d, for %S [0x%08x]"), err, &name, uid.iUid ); - } - else - { - User::Leave( KErrCorrupt ); - } - } - - -void CMemSpyEngineHelperECom::OnStartDocumentL( const RDocumentParameters& /*aDocParam*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnEndDocumentL( TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnStartElementL( const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - // - TInt err = KErrNone; - const TPtrC8 name( aElement.LocalName().DesC() ); - // - if ( name.CompareF( KMemSpyXmlSpec_MasterSection ) == 0 ) - { - iSeenMasterSection = ETrue; - } - else if ( iSeenMasterSection ) - { - if ( name.CompareF( KMemSpyXmlSpec_ChildSectionCategory ) == 0 ) - { - OnChildSectionCategoryL( aAttributes ); - } - else if ( name.CompareF( KMemSpyXmlSpec_ChildSectionInterface ) == 0 ) - { - OnChildSectionInterfaceL( aAttributes ); - } - } - // - User::LeaveIfError( err ); - } - - -void CMemSpyEngineHelperECom::OnEndElementL( const RTagInfo& /*aElement*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnContentL( const TDesC8& /*aBytes*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnStartPrefixMappingL( const RString& /*aPrefix*/, const RString& /*aUri*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnEndPrefixMappingL( const RString& /*aPrefix*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnIgnorableWhiteSpaceL( const TDesC8& /*aBytes*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnSkippedEntityL( const RString& /*aName*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnProcessingInstructionL( const TDesC8& /*aTarget*/, const TDesC8& /*aData*/, TInt aErrorCode ) - { - User::LeaveIfError( aErrorCode ); - } - - -void CMemSpyEngineHelperECom::OnError( TInt aErrorCode ) - { - iParserErrorCode = aErrorCode; - } - - -TAny* CMemSpyEngineHelperECom::GetExtendedInterface( const TInt32 /*aUid*/ ) - { - return NULL; - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CMemSpyEngineEComCategory::CMemSpyEngineEComCategory( CMemSpyEngineHelperECom& aHelper ) -: iHelper( aHelper ) - { - } - - -CMemSpyEngineEComCategory::~CMemSpyEngineEComCategory() - { - delete iCaption; - delete iName; - iInterfaces.ResetAndDestroy(); - iInterfaces.Close(); - } - - -void CMemSpyEngineEComCategory::ConstructL( const TDesC& aName ) - { - iName = aName.AllocL(); - iCaption = aName.AllocL(); // Replace later on - } - - -CMemSpyEngineEComCategory* CMemSpyEngineEComCategory::NewLC( CMemSpyEngineHelperECom& aHelper, const TDesC& aName ) - { - CMemSpyEngineEComCategory* self = new(ELeave) CMemSpyEngineEComCategory( aHelper ); - CleanupStack::PushL( self ); - self->ConstructL( aName ); - return self; - } - - -EXPORT_C CMemSpyEngineEComInterface& CMemSpyEngineEComCategory::At( TInt aIndex ) - { - return *iInterfaces[ aIndex ]; - } - - -EXPORT_C TInt CMemSpyEngineEComCategory::IndexOf( const CMemSpyEngineEComInterface& aEntry ) - { - const TInt index = iInterfaces.Find( &aEntry ); - return index; - } - - -EXPORT_C TInt CMemSpyEngineEComCategory::MdcaCount() const - { - return iInterfaces.Count(); - } - - -EXPORT_C TPtrC CMemSpyEngineEComCategory::MdcaPoint( TInt aIndex ) const - { - CMemSpyEngineEComInterface* iface = iInterfaces[ aIndex ]; - return iface->Caption(); - } - - -void CMemSpyEngineEComCategory::CreateInterfaceL( const TDesC& aName, TUid aUid ) - { - CMemSpyEngineEComInterface* iface = CMemSpyEngineEComInterface::NewLC( *this, aName, aUid ); - iInterfaces.AppendL( iface ); - CleanupStack::Pop( iface ); - } - - -void CMemSpyEngineEComCategory::BuildCaptionL() - { - delete iCaption; - iCaption = NULL; - - _LIT( KCaptionFormat, "\t%S\t\t%d interface" ); - iCaption = HBufC::NewL( 256 ); - TPtr pCaption( iCaption->Des() ); - pCaption.Format( KCaptionFormat, iName, iInterfaces.Count() ); - if ( iInterfaces.Count() > 1 ) - { - pCaption.Append( 's' ); - } - } - - - - - - - - - - - - -CMemSpyEngineEComInterface::CMemSpyEngineEComInterface( CMemSpyEngineEComCategory& aCategory, TUid aUid ) -: iUid( aUid ), iCategory( aCategory ) - { - } - - -CMemSpyEngineEComInterface::~CMemSpyEngineEComInterface() - { - delete iCaption; - delete iName; - iImplementations.ResetAndDestroy(); - iImplementations.Close(); - } - - -void CMemSpyEngineEComInterface::ConstructL( const TDesC& aName ) - { - iName = aName.AllocL(); - - // Get implementation information for this interface... - RImplInfoPtrArray infoArray; - CleanupResetAndDestroyPushL( infoArray ); - REComSession::ListImplementationsL( iUid, infoArray ); - - // Make implementation objects for each impl that exists. - const TInt count = infoArray.Count(); - for( TInt i=count-1; i>=0; i-- ) - { - CImplementationInformation* info = infoArray[ i ]; - - // Get info - CMemSpyEngineEComImplementation* impl = CMemSpyEngineEComImplementation::NewLC( *this, info ); - - // Now owned by impl - infoArray.Remove( i ); - - // Add to container - iImplementations.AppendL( impl ); - CleanupStack::Pop( impl ); - } - - // Tidy up - CleanupStack::PopAndDestroy( &infoArray ); - - // Build caption - _LIT( KCaptionFormat, "\t%S\t\t[0x%08x] [%d impl]" ); - iCaption = HBufC::NewL( 256 ); - TPtr pCaption( iCaption->Des() ); - pCaption.Format( KCaptionFormat, iName, iUid.iUid, count ); - } - - -CMemSpyEngineEComInterface* CMemSpyEngineEComInterface::NewLC( CMemSpyEngineEComCategory& aCategory, const TDesC& aName, TUid aUid ) - { - CMemSpyEngineEComInterface* self = new(ELeave) CMemSpyEngineEComInterface( aCategory, aUid ); - CleanupStack::PushL( self ); - self->ConstructL( aName ); - return self; - } - - -EXPORT_C CMemSpyEngineEComImplementation& CMemSpyEngineEComInterface::At( TInt aIndex ) - { - return *iImplementations[ aIndex ]; - } - - -EXPORT_C TInt CMemSpyEngineEComInterface::IndexOf( const CMemSpyEngineEComImplementation& aEntry ) - { - const TInt index = iImplementations.Find( &aEntry ); - return index; - } - - -EXPORT_C TInt CMemSpyEngineEComInterface::MdcaCount() const - { - return iImplementations.Count(); - } - - -EXPORT_C TPtrC CMemSpyEngineEComInterface::MdcaPoint( TInt aIndex ) const - { - CMemSpyEngineEComImplementation* impl = iImplementations[ aIndex ]; - return impl->Caption(); - } - - - - - - - - - - - - - - - - - - - - - -CMemSpyEngineEComImplementation::CMemSpyEngineEComImplementation( CMemSpyEngineEComInterface& aInterface ) -: iInterface( aInterface ) - { - } - - -CMemSpyEngineEComImplementation::~CMemSpyEngineEComImplementation() - { - delete iCaption; - delete iName; - delete iInfoText; - delete iInfo; - } - - -void CMemSpyEngineEComImplementation::ConstructL( CImplementationInformation* aInfo ) - { - iInfoText = new(ELeave) CDesCArrayFlat( 10 ); - TBuf< 256 > temp; - - // Make items. - if ( aInfo->DisplayName().Length() ) - { - _LIT( KNameFormat, "0x%08x - %S" ); - temp.Format( KNameFormat, aInfo->ImplementationUid().iUid, &aInfo->DisplayName() ); - } - else - { - _LIT( KNameFormat, "0x%08x" ); - temp.Format( KNameFormat, aInfo->ImplementationUid().iUid ); - } - iName = temp.AllocL(); - - _LIT( KItem1, "\tImpl. Uid\t\t0x%08x" ); - temp.Format( KItem1, aInfo->ImplementationUid().iUid ); - iInfoText->AppendL( temp ); - - if ( aInfo->DisplayName().Length() ) - { - _LIT( KItem2, "\tDisplay Name\t\t%S" ); - temp.Format( KItem2, &aInfo->DisplayName() ); - } - else - { - _LIT( KItem2, "\tDisplay Name\t\t[Undefined]" ); - temp.Copy( KItem2 ); - } - iInfoText->AppendL( temp ); - - _LIT( KItem3, "\tVersion\t\t%d" ); - temp.Format( KItem3, aInfo->Version() ); - iInfoText->AppendL( temp ); - - HBufC* opaqueData = CopyAndCropLC( aInfo->OpaqueData() ); - if ( opaqueData->Length() ) - { - _LIT( KItem4, "\tOpaque Data\t\t%S" ); - temp.Format( KItem4, opaqueData ); - } - else - { - _LIT( KItem4, "\tOpaque Data\t\t[Undefined]" ); - temp.Copy( KItem4 ); - } - iInfoText->AppendL( temp ); - CleanupStack::PopAndDestroy( opaqueData ); - - HBufC* dataType = CopyAndCropLC( aInfo->DataType() ); - if ( opaqueData->Length() ) - { - _LIT( KItem5, "\tData Type\t\t%S" ); - temp.Format( KItem5, dataType ); - } - else - { - _LIT( KItem5, "\tData Type\t\t[Undefined]" ); - temp.Copy( KItem5 ); - } - iInfoText->AppendL( temp ); - CleanupStack::PopAndDestroy( dataType ); - - _LIT( KItem6, "\tDrive\t\t%S" ); - TBuf< 10 > drive; - const TDriveNumber driveNumber = static_cast< TDriveNumber >( static_cast< TInt >( aInfo->Drive() ) ); - CMemSpyEngineHelperFileSystem::GetDriveNumberText( driveNumber, drive ); - temp.Format( KItem6, &drive ); - iInfoText->AppendL( temp ); - - if ( aInfo->Disabled() ) - { - iInfoText->AppendL( _L("\tIs Disabled\t\tYes") ); - } - else - { - iInfoText->AppendL( _L("\tIs Disabled\t\tNo") ); - } - - if ( aInfo->RomOnly() ) - { - iInfoText->AppendL( _L("\tROM-Only\t\tYes") ); - } - else - { - iInfoText->AppendL( _L("\tROM-Only\t\tNo") ); - } - - if ( aInfo->RomBased() ) - { - iInfoText->AppendL( _L("\tROM-Based\t\tYes") ); - } - else - { - iInfoText->AppendL( _L("\tROM-Based\t\tNo") ); - } - - // Make caption - if ( aInfo->DisplayName().Length() ) - { - _LIT( KCaptionFormat, "\t0x%08x\t\t%S" ); - temp.Format( KCaptionFormat, aInfo->ImplementationUid().iUid, &aInfo->DisplayName() ); - } - else - { - _LIT( KCaptionFormat, "\t0x%08x\t\t[Name Undefined]" ); - temp.Format( KCaptionFormat, aInfo->ImplementationUid().iUid ); - } - iCaption = temp.AllocL(); - - // Must do this last - iInfo = aInfo; - } - - -CMemSpyEngineEComImplementation* CMemSpyEngineEComImplementation::NewLC( CMemSpyEngineEComInterface& aInterface, CImplementationInformation* aInfo ) - { - CMemSpyEngineEComImplementation* self = new(ELeave) CMemSpyEngineEComImplementation( aInterface ); - CleanupStack::PushL( self ); - self->ConstructL( aInfo ); - return self; - } - - -HBufC* CMemSpyEngineEComImplementation::CopyAndCropLC( const TDesC8& aText ) - { - const TInt KMaxEComDataLength = 200; // Any longer and we'll crop it... - // - HBufC* data = HBufC::NewLC( aText.Length() ); - data->Des().Copy( aText ); - // - if ( data->Length() > KMaxEComDataLength ) - { - data->Des().SetLength( KMaxEComDataLength ); - } - // - return data; - } - - -EXPORT_C TInt CMemSpyEngineEComImplementation::MdcaCount() const - { - return iInfoText->MdcaCount(); - } - - -EXPORT_C TPtrC CMemSpyEngineEComImplementation::MdcaPoint( TInt aIndex ) const - { - return iInfoText->MdcaPoint( aIndex ); - } - - -