diff -r 000000000000 -r 4e1aa6a622a0 hwrmhaptics/hapticspluginmanager/src/hwrmhapticsuid.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hwrmhaptics/hapticspluginmanager/src/hwrmhapticsuid.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 2008-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: Haptics uid implementation. +* +*/ + + +#include +#include +#include +#include "hwrmhapticsuid.h" +#include "hwrmhapticstrace.h" + +//drive char and colon string length, e.g. "c:" +const TInt KDriveAndColon = 2; + +// Maximum uid file line length +const TInt KMaxLineLength( 100 ); + +// New line character used to terminate each line in uid file +const TInt KNewLine( '\n' ); + + +// format specifier used to match valid UIDs +_LIT8( KMatchUid, "0x????????" ); + +// format specifier used to match valid enabled sign +_LIT8( KMatchPlusSign, "+" ); + +// valid vendor id definition +_LIT8( KVid, "VID" ); + +// valid secure id definition +_LIT8( KSid, "SID" ); + + + +// --------------------------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------------------------- +// +TUidItem::TUidItem( const TDesC8& aUidType, TUid aUid, TBool aAllowed ) + : iUidType( aUidType ), iUid( aUid ), iAllowed( aAllowed ) + { + } + + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CHWRMHapticsUid* CHWRMHapticsUid::NewL( const TDesC& aFilename ) + { + CHWRMHapticsUid* self = NewLC( aFilename ); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. Leaves instance on the cleanup stack. +// --------------------------------------------------------------------------- +// +CHWRMHapticsUid* CHWRMHapticsUid::NewLC( const TDesC& aFilename ) + { + CHWRMHapticsUid* self = new( ELeave ) CHWRMHapticsUid(); + + CleanupStack::PushL( self ); + self->ConstructL( aFilename ); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CHWRMHapticsUid::~CHWRMHapticsUid() + { + // Delete all the array objects + iUidArray.Close(); + } + + +// --------------------------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------------------------- +// +CHWRMHapticsUid::CHWRMHapticsUid() + { + } + +// --------------------------------------------------------------------------- +// By default Symbian 2nd phase constructor is private. +// --------------------------------------------------------------------------- +// +void CHWRMHapticsUid::ConstructL( const TDesC& aFilename ) + { + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + + // Buffer to store the full path and filename + TFileName filename; + + // Get private file path + User::LeaveIfError( fs.PrivatePath( filename ) ); + + // add the filename to path + filename.Insert( 0, PathInfo::RomRootPath().Left( KDriveAndColon ) ); + filename.Append( aFilename ); + + // Parse the file and construct the array of UIDs + ParseUidFileL( fs, filename ); + + CleanupStack::PopAndDestroy( &fs ); + } + + +// --------------------------------------------------------------------------- +// Checks if automated license setting is allowed for VID/SID combination +// found from aMessage. If definition for SID is found then VID checking +// is omitted. +// --------------------------------------------------------------------------- +// +TBool CHWRMHapticsUid::LicenseAutoSetAllowed( const RMessage2& aMessage ) + { + TUid sid = aMessage.SecureId(); + TUid vid = aMessage.VendorId(); + TBool allowed = EFalse; + TBool sidFound = EFalse; + + for ( TInt n=0; n < iUidArray.Count(); n++ ) + { + if ( iUidArray[n].iUidType == KSid && + sid == iUidArray[n].iUid ) + { + allowed = iUidArray[n].iAllowed; + sidFound = ETrue; + } + + if ( !sidFound && + iUidArray[n].iUidType == KVid && + vid == iUidArray[n].iUid ) + { + allowed = iUidArray[n].iAllowed; + } + } + + return allowed; + } + + +// --------------------------------------------------------------------------- +// Method constructs the array of UIDs from the given file. +// A valid line in the file contains only UID +// --------------------------------------------------------------------------- +// +void CHWRMHapticsUid::ParseUidFileL( RFs& aFs, + const TDesC& aFilename ) + { + TLex8 lex; + TPtrC8 sign; + TPtrC8 uidType; + TPtrC8 id; + TUid uid; + TInt err( KErrNone ); + + // Buffer to read each line of the file into + TBuf8 fileline; + TChar newLine( KNewLine ); + RFileReadStream stream; + + COMPONENT_TRACE( ( _L( "CHWRMHapticsUid::ParseUidFileL - Opening UID file: %S" ), &aFilename ) ); + + // Open the file and attach to stream + err = stream.Open( aFs, aFilename, EFileRead ); + + // Return without error if file is not found + if ( err != KErrNone ) + { + COMPONENT_TRACE( ( _L( "CHWRMHapticsUid::ParseUidFileL - UID file open failed: %S, error: %d" ), &aFilename, err ) ); + } + else + { + CleanupClosePushL( stream ); + + while( err != KErrEof ) + { + // read from the file upto the newline character + TRAP( err, stream.ReadL( fileline, newLine ) ); + + lex.Assign( fileline ); + sign.Set( lex.NextToken() ); + uidType.Set( lex. NextToken() ); + id.Set( lex.NextToken() ); + TBool allowed = EFalse; + if( sign.Match( KMatchPlusSign ) == 0 ) + { + allowed = ETrue; + } + if( id.Match( KMatchUid ) == 0 ) + { + // convert it + if( ConvertId( id, uid ) != KErrCorrupt ) + { + // add UID to array + iUidArray.AppendL( TUidItem( uidType, uid, allowed ) ); + } + } + } + + // Close stream + CleanupStack::PopAndDestroy( &stream ); + } + } + +// --------------------------------------------------------------------------- +// Helper method to convert and validate UID from a descriptor +// --------------------------------------------------------------------------- +// +TInt CHWRMHapticsUid::ConvertId( const TDesC8& aUidDes, + TUid& aUid ) const + { + TInt ret( KErrNone ); + TUint32 id; + + // this is a matching id + TLex8 lex( aUidDes.Right( 8 ) ); + + if( lex.Val( id, EHex ) != KErrNone ) + { + // Failed to convert to int + ret = KErrCorrupt; + } + else + { + // conversion ok so set the uid + aUid.iUid = id; + } + + return ret; + } + + +// End of File