diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/capinfo.cpp --- a/connectivitymodules/SeCon/services/csc/src/capinfo.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1031 +0,0 @@ -/* -* Copyright (c) 2005-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: CCapInfo implementation -* -*/ - - -// INCLUDE FILES - -#include -#include -#include // for PathInfo::SoundsPath -#include -#include "sconsyncservice.h" -#include "capinfo.h" -#include "caplist.h" -#include "capparser.h" -#include "caputils.h" -#include "stringlist.h" -#include "sconversioninfo.h" -#include "debug.h" - - -_LIT8( KLineFeed, "\r\n" ); - -const TInt KDefaultArrayGranularity = 5; - - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CCapInfo::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CCapInfo* CCapInfo::NewL() - { - TRACE_FUNC_ENTRY; - CCapInfo* self = new (ELeave) CCapInfo(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(self); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::~CCapInfo() -// Destructor -// ----------------------------------------------------------------------------- -// -CCapInfo::~CCapInfo() - { - TRACE_FUNC_ENTRY; - iFsSession.Close(); - delete iHeapBuf; - delete iCapList; - delete iSconInfo; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::CapabilityDocumentL(CBufFlat* aBuf) -// Creates capability xml document end places it in aBuf -// ----------------------------------------------------------------------------- -// -void CCapInfo::CapabilityDocumentL(CBufFlat* aBuf) - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - - // set buffer where capability document is written - SetCapabilityBuf( aBuf ); - - WriteL( KXmlVersion ); - WriteL( KComment1 ); - WriteL( KDocType ); - WriteL( KRootBegin ); - - - // - // general - // - TRAP( err, GeneralInfoL() ); - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "GeneralInfoL failed : %d", err ); - User::Leave( err ); - } - - - // - // services - // - // Search service files first from C-drive, and then from Z - // Do not add same files twice. - - RArray excludeList( KDefaultArrayGranularity ); - CleanupClosePushL( excludeList ); - RArray filesAdded( KDefaultArrayGranularity ); - CleanupClosePushL( filesAdded ); - - //read service files from C Import folder - TRAP( err, ServiceInfoL( KCapabilityDirCImport, excludeList, filesAdded ) ); - LOGGER_WRITE_1( "ServiceInfoL(KCapabilityDirCImport) returned : %d", err ); - for ( TInt i=0; iFetchInfoL( iFsSession )); - LOGGER_WRITE_1("sconInfo->FetchInfoL() Leaved: %d", err); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::CCapInfo() -// Constuctor -// ----------------------------------------------------------------------------- -// -CCapInfo::CCapInfo() - { - } - -// ----------------------------------------------------------------------------- -// CCapInfo::CapList() -// Returns caplist -// ----------------------------------------------------------------------------- -// -CCapList* CCapInfo::CapList() - { - TRACE_FUNC; - __ASSERT_DEBUG(iCapList, CapUtil::Panic(KErrGeneral)); - return iCapList; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::SetCapabilityBuf( CBufFlat* aBuf ) -// Set capability buffer -// ----------------------------------------------------------------------------- -// -void CCapInfo::SetCapabilityBuf( CBufFlat* aBuf ) - { - TRACE_FUNC; - iCapabilityBuf=aBuf; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::GeneralInfoL() -// Write general device capability information. -// ----------------------------------------------------------------------------- -// -void CCapInfo::GeneralInfoL() - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - TBuf buf; - TBuf longName; - TBuf coutryCode; - TBuf networkID; - - WriteTagL(EGeneral, TXmlParser::EElementBegin); - - if ( !iSconInfo->IsReady() ) - { - LOGGER_WRITE("iSconInfo wasn't ready, call iSconInfo->FetchInfoL"); - iSconInfo->FetchInfoL( iFsSession ); - } - - if ( iSconInfo->iManufacturer ) - { - WriteValueL( EManufacturer, *iSconInfo->iManufacturer ); - } - - if ( iSconInfo->iProduct ) - { - WriteValueL( EModel, *iSconInfo->iProduct ); - } - - // serial number - if ( iSconInfo->iSerialNumber ) - { - WriteValueL( ESN, *iSconInfo->iSerialNumber ); - } - - // software version - if ( iSconInfo->iSWVersion ) - { - WriteAttributeL( ESW, *iSconInfo->iSWVersion, iSconInfo->iDate ); - } - - // language - WriteValueL( ELanguage, iSconInfo->iLanguage ); - - // this must succeed - do not trap - MemoryInfoL(); - - // Operator - TRAP( err, CapUtil::GetOperatorNameL( longName, coutryCode, networkID ) ); - LOGGER_WRITE_1( "CapUtil::GGetOperatorNameL returned : %d", err ); - if( err == KErrNone ) - { - LOGGER_WRITE_3( "CSConFsHandler::GetOperatorNameL longName = %S coutryCode = %S networkID = %S", &longName, &coutryCode, &networkID ); - _LIT( KNetworkInfo, "NetworkInfo" ); - _LIT( KCurrentNetwork, "CurrentNetwork=" ); - _LIT( KCountryCode, "CountryCode=" ); - _LIT( KNetworkID, "NetworkID=" ); - - WriteTagL( EExt, TXmlParser::EElementBegin ); - WriteValueL( EXNam, KNetworkInfo ); - - // write CurrentNetwork - buf.Copy( KCurrentNetwork ); - buf.Append( longName ); - WriteValueL( EXVal, buf ); - - // write CountryCode - buf.Copy( KCountryCode ); - buf.Append( coutryCode ); - WriteValueL( EXVal, buf ); - - // write NetworkID - buf.Copy( KNetworkID ); - buf.Append( networkID ); - WriteValueL( EXVal, buf ); - - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - if ( iSconInfo->iModel ) - { - // print modelname (phone model sales name. For example "N01".) - WriteTagL( EExt, TXmlParser::EElementBegin ); - _LIT(KModelName, "ModelName"); - WriteValueL( EXNam, KModelName ); - WriteValueL( EXVal, *iSconInfo->iModel ); - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - if ( iSconInfo->iProductCode ) - { - // print productcode - WriteTagL( EExt, TXmlParser::EElementBegin ); - _LIT( KProductCode, "ProductCode" ); - WriteValueL( EXNam, KProductCode ); - WriteValueL( EXVal, *iSconInfo->iProductCode ); - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - - // print advanced info - WriteTagL( EExt, TXmlParser::EElementBegin ); - _LIT(KAdvancedDeviceInfo, "AdvancedDeviceInfo"); - WriteValueL( EXNam, KAdvancedDeviceInfo ); - - TBuf temp; - - if ( iSconInfo->iRevision ) - { - // product revision. For example "01" - _LIT( KRevision, "Revision=" ); - temp.Copy( KRevision ); - temp.Append( *iSconInfo->iRevision ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - - if ( iSconInfo->iSysVersionInfo ) - { - _LIT( KFWVersion, "FWVersion=" ); - temp.Copy( KFWVersion ); - temp.Append( *iSconInfo->iSysVersionInfo ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - SysVersionInfo::TSymbianOSVersion osVersion; - err = iSconInfo->GetSymbianVersion( osVersion ); - LOGGER_WRITE_1("TSymbianOSVersion info error: %d", err) - if ( !err ) - { - // Now osVersion contains the Symbian OS version information - _LIT( KSymbianOSVersion, "SymbianOSVersion=%d.%d" ); - temp.Format( KSymbianOSVersion, - osVersion.iMajorVersion, - osVersion.iMinorVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - - WriteValueL( EXVal, temp ); - } - - VersionInfo::TPlatformVersion platformVersion; - err = iSconInfo->GetS60Version( platformVersion ); - if ( !err ) - { - _LIT( KS60Version, "S60PlatformVersion=%d.%d" ); - temp.Format( KS60Version, - platformVersion.iMajorVersion, - platformVersion.iMinorVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - - if ( iSconInfo->iLangVersion ) - { - _LIT( KLangVersion, "LangVersion=" ); - temp.Copy( KLangVersion ); - temp.Append( *iSconInfo->iLangVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - if ( iSconInfo->iLangSWVersion ) - { - _LIT( KLangSWVersion, "LangSWVersion=" ); - temp.Copy( KLangSWVersion ); - temp.Append( *iSconInfo->iLangSWVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - if ( iSconInfo->iOPVersion ) - { - // CustomerVersion - _LIT( KOPVersion, "OPVersion=" ); - temp.Copy( KOPVersion ); - temp.Append( *iSconInfo->iOPVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - // screen size - LOGGER_WRITE_2("Size, width: %d, height: %d", - iSconInfo->iScreenSize.iWidth, - iSconInfo->iScreenSize.iHeight ); - _LIT( KWidth, "ScreenWidth=%d" ); - _LIT( KHeight, "ScreenHeight=%d" ); - - temp.Format( KWidth, iSconInfo->iScreenSize.iWidth ); - WriteValueL( EXVal, temp ); - - temp.Format( KHeight, iSconInfo->iScreenSize.iHeight ); - WriteValueL( EXVal, temp ); - - WriteTagL( EExt, TXmlParser::EElementEnd ); - // end of advanced info - - WriteTagL(EGeneral, TXmlParser::EElementEnd); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::MemoryInfoL() -// Create memory info for all drives (RAM excluded). -// ----------------------------------------------------------------------------- -// -void CCapInfo::MemoryInfoL() - { - TRACE_FUNC_ENTRY; - - TMemoryInfo info; - TInt devDriveCount = 0; - TInt mmcDriveCount = 0; - - //Write all drivers to folderlisting object - TDriveList driveList; - // Get all drives that are visible to the user. - TInt driveCount; - User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iFsSession, driveList, driveCount ) ); - - for( TInt i = EDriveA; i < KMaxDrives; i++ ) - { - if( driveList[i] ) - { - TUint driveStatus; - TInt err = DriveInfo::GetDriveStatus( iFsSession, i, driveStatus ); - if( err ) - { - LOGGER_WRITE_1( "CCapInfo::MemoryInfoL() : DriveInfo::GetDriveStatus: %d", i); - continue; - } - - if( !(driveStatus & DriveInfo::EDrivePresent ) - || driveStatus & DriveInfo::EDriveCorrupt - || (driveStatus & DriveInfo::EDriveRemote) ) - { - LOGGER_WRITE_1( "skip drive %d", i); - continue; - } - - TRAP( err, CapUtil::GetMemoryInfoL( iFsSession, i, info )); - if ( err ) - { - LOGGER_WRITE_1( "CapUtil::GetMemoryInfoL() : Leaved with: %d", err); - continue; - } - - info.iDriveStatus = driveStatus; - if( driveStatus & DriveInfo::EDriveInternal ) - { - // if internal (DEV) drive, save drive number - devDriveCount++; - info.iMemNr = devDriveCount; - } - else if ( driveStatus & DriveInfo::EDriveRemovable ) - { - // if removable (MMC) drive, save drive number - mmcDriveCount++; - info.iMemNr = mmcDriveCount; - } - else - { - // was not internal or removable, skip. - LOGGER_WRITE( "CCapInfo::MemoryInfoL() : not internal or removable, skip." ); - continue; - } - - WriteMemoryInfoL(info); - - } - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::MemoryInfoL(TMemoryInfo& aInfo) -// Create memory info for all drives (RAM excluded). -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteMemoryInfoL(TMemoryInfo& aInfo) - { - TRACE_FUNC_ENTRY; - TBuf buf; - - WriteTagL(EMemory, TXmlParser::EElementBegin); - - if( aInfo.iDriveStatus & DriveInfo::EDriveInternal ) - { - buf = KMediaFlash; - } - else - { - buf = KMediaMMC; // memory card (MMC) - } - - if( aInfo.iMemNr > 1 ) - { - // append memory number DEV2, MMC2.. - buf.AppendNum( aInfo.iMemNr ); - } - - WriteValueL(EMemType, buf); - WriteValueL(ELocation, aInfo.iLocation); - WriteValueL(EFree, aInfo.iFree); - WriteValueL(EUsed, aInfo.iUsed); - - WriteValueL(EFileNLen, aInfo.iFileNameSize); - - WriteTagL(EMemory, TXmlParser::EElementEnd); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::ServiceInfoL(const TDesC& aDir) -// Reads service xml-files from directory and writes them into capability -// document. -// ----------------------------------------------------------------------------- -// -void CCapInfo::ServiceInfoL(const TDesC& aDir, const RArray& aExcludeList, - RArray& aFilesAdded) - { - TRACE_FUNC_ENTRY; - CCapList* capList=CapList(); - - RArray array( KDefaultArrayGranularity ); - CleanupClosePushL(array); - - CStringList* stringList=CStringList::NewLC(); - - CapUtil::GetFileListL(iFsSession, aDir, array); - - _LIT(KFormat, "%S%S"); - TFileName name; - TInt count=array.Count(); - for (TInt i=0; iList()->Reset(); - capList->List()->ReadFromFileL( iFsSession, name ); - if (capList->FindServiceL(stringList)) - { - WriteNewLineL(); - WriteFromListL(stringList); - - User::LeaveIfError( aFilesAdded.Append(array[i]) ); - LOGGER_WRITE_1( "File '%S' added to list", &array[i] ); - } - } - } - - CleanupStack::PopAndDestroy(stringList); - CleanupStack::PopAndDestroy(&array); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::FolderServiceL() -// Writes folder service. Notice that this service is created in code because -// pathinfo component is used to get folder names. -// ----------------------------------------------------------------------------- -// -void CCapInfo::FolderServiceL() - { - TRACE_FUNC_ENTRY; - TBuf rootPath; - TBuf memoryType(KNullDesC); - TFileName folderName; - _LIT( KFormat, "%S%S" ); - - WriteNewLineL(); - WriteTagL(EService, TXmlParser::EElementBegin); - - WriteValueL(EName, KFolderServiceName); - WriteValueL(EUUID, KFolderServiceUid); - WriteValueL(EVersion, KFolderServiceVersion); - - WriteTagL(EObject, TXmlParser::EElementBegin); - WriteValueL(EType, KFolderServiceType); - WriteTagL(EObject, TXmlParser::EElementEnd); - TInt drive; - TInt err; - - CapUtil::GetDefaultRootPathL( iFsSession, rootPath ); - if( rootPath.Length() > 0 ) - { - err = iFsSession.CharToDrive( rootPath[0], drive ); - if( err == KErrNone ) - { - CapUtil::GetMemoryType( iFsSession, memoryType, drive ); - } - } - - // EFolderImages - folderName.Format( KFormat, &rootPath, &PathInfo::ImagesPath() ); - WriteFolderL( KFolderImages, folderName, memoryType ); - - // EFolderGraphics - folderName.Format( KFormat, &rootPath, &PathInfo::ImagesPath() ); - WriteFolderL(KFolderGraphics, folderName, memoryType); - - // EFolderTones - folderName.Format( KFormat, &rootPath, &PathInfo::DigitalSoundsPath() ); - WriteFolderL(KFolderTones, folderName, memoryType); - - // EFolderMusic - folderName.Format( KFormat, &rootPath, &PathInfo::SoundsPath() ); - WriteFolderL(KFolderMusic, folderName, memoryType); - - // EFolderVideos - folderName.Format( KFormat, &rootPath, &PathInfo::VideosPath() ); - WriteFolderL(KFolderVideos, folderName, memoryType); - - // EFolderInstalls - folderName.Format( KFormat, &rootPath, &PathInfo::InstallsPath() ); - WriteFolderL(KFolderInstalls, folderName, memoryType); - - - WriteTagL(EService, TXmlParser::EElementEnd); - WriteNewLineL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::SyncSolutionsServiceL() -// Reads last used syncSolutions from cenrep and writes to capability object -// ----------------------------------------------------------------------------- -// -void CCapInfo::SyncSolutionsServiceL() - { - TRACE_FUNC_ENTRY; - TSConSolutionInfo calendar; - TSConSolutionInfo contact; - TSConSolutionInfo sms; - TSConSolutionInfo bookmark; - - CSConSyncService *syncService = CSConSyncService::NewLC(); - syncService->GetSolutionL( KSeconCalendarUid, calendar ); - syncService->GetSolutionL( KSeconContactsUid, contact ); - syncService->GetSolutionL( KSeconSmsUid, sms ); - syncService->GetSolutionL( KSeconBookmarkUid, bookmark ); - CleanupStack::PopAndDestroy( syncService ); - - WriteSyncSolutionsServiceL( calendar, contact, sms, bookmark ); - - TRACE_FUNC_EXIT; - } - - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteSyncSolutionsServiceL() -// Writes SyncSolutionsService data to capability object. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteSyncSolutionsServiceL( const TSConSolutionInfo& aCalendar, - const TSConSolutionInfo& aContact, - const TSConSolutionInfo& aSms, - const TSConSolutionInfo& aBookmark) - { - TRACE_FUNC_ENTRY; - - WriteTagL( EService, TXmlParser::EElementBegin ); - - WriteValueL( EName, KSyncSolutionsServiceName ); - WriteValueL( EVersion, KSyncSolutionsServiceVersion ); - - if ( aCalendar.iUid != 0 ) - { - WriteSolutionTagL( KSyncCalendar, aCalendar ); - } - - if ( aContact.iUid != 0 ) - { - WriteSolutionTagL( KSyncContacts, aContact ); - } - - if ( aSms.iUid != 0 ) - { - WriteSolutionTagL( KSyncSms, aSms ); - } - - if ( aBookmark.iUid != 0 ) - { - WriteSolutionTagL( KSyncBookmark, aBookmark ); - } - - /* - * - * DesktopSync - * - * - * - */ - if ( !iSconInfo->iDesktopSyncError ) - { - WriteTagL( EExt, TXmlParser::EElementBegin ); - WriteValueL( EXNam, KDesktopSync ); - - TBuf buffer; - buffer.AppendNum( iSconInfo->iDesktopSync ); - - WriteValueL( EXVal, buffer ); - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - - - WriteTagL( EService, TXmlParser::EElementEnd ); - TRACE_FUNC_EXIT; - } - - - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteSolutionTagL() -// Writes SyncSolutionsService solution data to capability object. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteSolutionTagL( const TDesC& aContentName, - const TSConSolutionInfo& aSolution ) - { - TRACE_FUNC_ENTRY; - _LIT( KFormatUID, "UID=0x%08x" ); - _LIT( KFormatName, "Name=%S" ); - _LIT( KFormatDate, "Timestamp=%04d%02d%02dT%02d%02d%02dZ" ); - - WriteTagL( EExt, TXmlParser::EElementBegin ); - WriteValueL( EXNam, aContentName ); - - TFileName temp; - temp.Format( KFormatUID, aSolution.iUid ); - WriteValueL( EXVal, temp ); - - temp.Format( KFormatName, &aSolution.iSolutionName ); - WriteValueL( EXVal, temp ); - - if ( aSolution.iTime.Int64() != 0 ) - { - // write time - TDateTime time = aSolution.iTime.DateTime(); - temp.Format( KFormatDate, time.Year(), time.Month() + 1, - time.Day() + 1, time.Hour(), time.Minute(), time.Second() ); - WriteValueL( EXVal, temp ); - - } - - - WriteTagL( EExt, TXmlParser::EElementEnd ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteFolderL(const TDesC& aType, const TDesC& aFullName, -// const TDesC& aMemory) -// Writes one folder name element. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteFolderL(const TDesC& aType, const TDesC& aFullName, - const TDesC& aMemory) - { - TRACE_FUNC_ENTRY; - _LIT(KFormat, "%S=%S"); - - TBuf buf; - const TInt KReservedSize = 10; - if ( aFullName.Length() + KReservedSize > KBufSize ) - { - return; - } - buf.Format(KFormat, &KFolderNameTag, &aFullName); - - - WriteTagL(EExt, TXmlParser::EElementBegin); - - WriteValueL(EXNam, aType); - WriteValueL(EXVal, buf); - - buf.Format(KFormat, &KFolderMemoryTypeTag, &aMemory); - WriteValueL(EXVal, buf); - - - WriteTagL(EExt, TXmlParser::EElementEnd); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteL(const TDesC& aText) -// Writes one element to capability buffer. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteL(const TDesC& aText) - { - if (aText.Length() > iBuf.MaxLength()) - { - User::Leave(KErrTooBig); - } - - - iBuf=aText; - iBuf.Trim(); - FormatElement(iBuf); - TPtr8 ptr = iHeapBuf->Des(); - - if ( iBuf.Length()+2 > ptr.MaxLength() ) - { - User::Leave(KErrTooBig); - } - - //unicode conversion - HBufC8* convBuf = HBufC8::NewLC( iBuf.Size() ); - TPtr8 convPtr = convBuf->Des(); - - CnvUtfConverter::ConvertFromUnicodeToUtf8(convPtr, iBuf); - - ptr.Copy(convPtr); - ptr.Append( KLineFeed ); // linefeed - - CleanupStack::PopAndDestroy( convBuf ); - - TInt pos=iCapabilityBuf->Size(); - iCapabilityBuf->InsertL(pos, ptr); - - iBuf=KNullDesC; - } - -void CCapInfo::WriteNewLineL() - { - TInt pos=iCapabilityBuf->Size(); - iCapabilityBuf->InsertL(pos, KLineFeed ); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteValueL(TInt aId, const TDesC& aValue) -// Constructs element with value (eg en) -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteValueL(TInt aId, const TDesC& aValue) - { - // empty values not written to capability object - if (aValue.Length()<1) - { - LOGGER_WRITE( "WriteValueL: value is empty" ); - return; - } - - TBuf buf; - - TRAPD(err, CapParser::MakeElementL(buf, aId, aValue)); - if (err==KErrNone) - { - WriteL(buf); - } - else if (err==KErrTooBig) - { - WriteBigValueL(aId, aValue); - } - else - { - User::Leave(err); - } - - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteBigValueL(TInt aId, const TDesC& aValue) -// Constructs element with value -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteBigValueL(TInt aId, const TDesC& aValue) - { - HBufC* hBuf=HBufC::NewL(aValue.Length()+KBufSize); - CleanupStack::PushL(hBuf); - - TPtr pBuf(hBuf->Des()); - CapParser::MakeElementL(pBuf, aId, aValue); - WriteL(*hBuf); - - CleanupStack::PopAndDestroy(hBuf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteValueL(TInt aId, TInt64 aValue) -// Constructs element with integer value -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteValueL(TInt aId, TInt64 aValue) - { - TBuf buf; - TBuf value; - CapUtil::IntToStr(value, aValue); - CapParser::MakeElementL(buf, aId, value); - WriteL(buf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteTagL(TInt aId, TInt aType) -// Constructs element without value (eg ) -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteTagL(TInt aId, TInt aType) - { - TBuf buf; - CapParser::MakeElementL(buf, aId, aType); - WriteL(buf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteAttributeL(TInt aId, const TDesC& aVersion, const TDesC& aDate) -// Constructs element with attributes "Version" and "Date" -// (eg ) -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteAttributeL(TInt aId, const TDesC& aVersion, - const TDesC& aDate) - { - // empty values not written to capability object - if (aVersion.Length()<1 && aDate.Length()<1) - { - LOGGER_WRITE( "WriteAttributeL: attributes are empty" ); - return; - } - - TBuf buf; - CapParser::MakeElementL(buf, aId, aVersion, aDate); - WriteL(buf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteFromListL(CStringList* aList) -// Writes elements from list to capability buffer. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteFromListL(CStringList* aList) - { - TInt count=aList->Count(); - - for (TInt i=0; iReadPtr(i)); - } - } - -// ----------------------------------------------------------------------------- -// CCapInfo::FormatElement(TDes& aText) -// Function adds indentation spaces to capability elements to improve -// readability. -// ----------------------------------------------------------------------------- -// -void CCapInfo::FormatElement(TDes& aText) - { - TXmlParser parser; - - parser.Set(aText); - TInt type=parser.Type(); - TBuf tag; - parser.GetTag(tag); - - if (type==TXmlParser::EElementEnd) - { - TInt id1=CapParser::ElementId(tag); - TInt id2=iIdStack.Pop(); - - __ASSERT_DEBUG(id1==id2, CapUtil::Panic(KErrGeneral)); - id1=0; - id2=0; - } - - AddFormatText(aText, iIdStack.Size()); - - if (type==TXmlParser::EElementBegin) - { - TInt id1=CapParser::ElementId(tag); - iIdStack.Push(id1); - } - } - -// ----------------------------------------------------------------------------- -// CCapInfo::AddFormatText( TDes& aText, TInt aNum ) const -// Adds format text -// ----------------------------------------------------------------------------- -// -void CCapInfo::AddFormatText( TDes& aText, TInt aNum ) const - { - TBuf buf; - buf = KNullDesC; - - if ( aNum > KNestingLimit ) - { - aNum = KNestingLimit; - } - - for ( TInt i=0; ibuf.Length() ) - { - aText.Insert( 0, buf ); - } - } - -// End of file - -