diff -r f742655b05bf -r d38647835c2e voipplugins/ipapputils/src/cipappphoneutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/ipapputils/src/cipappphoneutils.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,256 @@ +/* +* Copyright (c) 2007-2010 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: Utility class to phone functionality +* +*/ + + +#include +#include +#include + +#include "cipappphoneutils.h" + +const TUint8 KSVPLineFeed2 = '\n'; +const TInt KHwVersionIn3rdRow = 4; +_LIT8( KSVPSpaceMark, " " ); +_LIT8( KSVPLineFeed, "\n" ); +_LIT( KSVPSalesModelFileName, "\\resource\\versions\\model.txt" ); +_LIT( KSVPCopyright, "©" ); +_LIT( KSVPCopyright2, "(C)" ); +_LIT( KSVPCopyright3, "(c)" ); +_LIT( KSVPSpace2, " " ); +_LIT( KSVPS60,"S60" ); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CIpAppPhoneUtils::CIpAppPhoneUtils() + { + } + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CIpAppPhoneUtils* CIpAppPhoneUtils::NewL() + { + CIpAppPhoneUtils* self = CIpAppPhoneUtils::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CIpAppPhoneUtils* CIpAppPhoneUtils::NewLC() + { + CIpAppPhoneUtils* self = new( ELeave ) CIpAppPhoneUtils; + CleanupStack::PushL( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CIpAppPhoneUtils::~CIpAppPhoneUtils() + { + } + +// --------------------------------------------------------------------------- +// CIpAppPhoneUtils::GetTerminalTypeL +// --------------------------------------------------------------------------- +// +EXPORT_C void CIpAppPhoneUtils::GetTerminalTypeL( TDes& aTerminalType ) const + { + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + CleanupClosePushL( fsSession ); + + GetTerminalTypeL( aTerminalType, fsSession ); + + CleanupStack::PopAndDestroy( &fsSession ); + } + +// --------------------------------------------------------------------------- +// CIpAppPhoneUtils::GetTerminalTypeL +// --------------------------------------------------------------------------- +// +EXPORT_C void CIpAppPhoneUtils::GetTerminalTypeL( + TDes& aTerminalType, RFs& aFs ) const + { + RBuf swVersion; + CleanupClosePushL( swVersion ); + TInt lineFeedCount = 0; + TBuf8< KSVPMaxTerminalTypeLength > terminalType; + + TBuf< KSVPMaxTerminalTypeLength > firstRow; + TBuf< KSVPPhoneModelLength > phoneModel; + TRAP_IGNORE( GetPhoneModelL( phoneModel, aFs ) ); + + swVersion.CreateL( KSysUtilVersionTextLength ); + User::LeaveIfError( SysUtil::GetSWVersion( swVersion ) ); + + const TInt swVersionLength( swVersion.Length() ); + for ( TInt i = 0; i < swVersionLength ; i++ ) + { + if ( !lineFeedCount && ( KSVPLineFeed2 != swVersion[i] ) ) + { + firstRow.Append( swVersion[i] ); // this is 1st row a.k.a SW-version + } + if ( KSVPLineFeed2 == swVersion[i] ) + { + lineFeedCount++; + if( lineFeedCount == 2 ) + { + // Delete 1st and 2nd row. + swVersion.Delete( 0, i ); + const TInt swVersionLength2( swVersion.Length() ); + + for ( TInt k = 0; k < swVersionLength2 ; k++ ) + { + if ( KSVPLineFeed2 == swVersion[k] ) + { + lineFeedCount++; + } + if ( lineFeedCount == KHwVersionIn3rdRow ) + { + // HW version is in 3rd row, delete rest of SWversion + const TInt charsToDelete( swVersionLength2 - k ); + swVersion.Delete( k, charsToDelete ); + break; + } + } + break; + } + } + } + + terminalType.Append( phoneModel ); // Add HW manufacturer, e.g. our company + terminalType.Append( swVersion ); // Add HW version + terminalType.Append( KSVPSpaceMark ); + terminalType.Append( firstRow ); // Add SW version + + // Replace linefeeds with space marks + TInt linefeedIndex = 0; + for ( ; KErrNotFound != linefeedIndex ; ) + { + linefeedIndex = terminalType.Find( KSVPLineFeed ); + if ( KErrNotFound != linefeedIndex ) + { + // 1 is the length of KSpaceMark + terminalType.Replace( linefeedIndex, 1, KSVPSpaceMark ); + } + } + aTerminalType.Copy( terminalType ); + CleanupStack::PopAndDestroy( &swVersion ); + } + + +// --------------------------------------------------------------------------- +// CIpAppPhoneUtils::GetPhoneModelL +// --------------------------------------------------------------------------- +// +EXPORT_C void CIpAppPhoneUtils::GetPhoneModelL( TDes& aPhoneModel ) const + { + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + CleanupClosePushL( fsSession ); + + GetPhoneModelL( aPhoneModel, fsSession ); + + CleanupStack::PopAndDestroy( &fsSession ); + } + +// --------------------------------------------------------------------------- +// CIpAppPhoneUtils::GetPhoneModelL +// --------------------------------------------------------------------------- +// +EXPORT_C void CIpAppPhoneUtils::GetPhoneModelL( TDes& aPhoneModel, + RFs& aFs ) const + { + RFile file; + TParse parse; + parse.Set( PathInfo::RomRootPath(), NULL, NULL); + TFileName myfile( parse.Drive() ); + myfile.Append( KSVPSalesModelFileName ); + User::LeaveIfError( file.Open( aFs, + myfile, EFileShareReadersOnly | EFileRead ) ); + + CleanupClosePushL( file ); + + HBufC* phoneModel = HBufC::NewLC( KSVPPhoneModelLength ); + TPtr ptr = phoneModel->Des(); + + // Read the data from file. + TFileText reader; + reader.Set( file ); + User::LeaveIfError( reader.Read( ptr ) ); + + // Phone model to aPhoneModel + aPhoneModel.Append( *phoneModel ); + + TInt copyrightPosition = aPhoneModel.Find( KSVPCopyright ); + if ( KErrNotFound != copyrightPosition ) + { + // Delete copyright mark. + aPhoneModel.Delete( copyrightPosition, 1 ); + } + + copyrightPosition = aPhoneModel.Find( KSVPCopyright2 ); + if ( KErrNotFound != copyrightPosition ) + { + // Delete copyright mark. + aPhoneModel.Delete( copyrightPosition, KSVPCopyright2().Length() ); + } + copyrightPosition = aPhoneModel.Find( KSVPCopyright3 ); + if ( KErrNotFound != copyrightPosition ) + { + // Delete copyright mark. + aPhoneModel.Delete( copyrightPosition, KSVPCopyright3().Length() ); + } + + TInt spacePosition = aPhoneModel.Find( KSVPSpace2 ); + TInt modelLength = aPhoneModel.Length(); + + while ( 0 == spacePosition ) + { + // Delete leading space character. + aPhoneModel.Delete( 0, 1 ); + modelLength = aPhoneModel.Length(); + spacePosition = aPhoneModel.Find( KSVPSpace2 ); + } + + if ( ( KErrNotFound != spacePosition ) && ( 0 != spacePosition ) ) + { + // We don't need the whole HW version, just 1st word + aPhoneModel.Delete( spacePosition, modelLength - spacePosition ); + } + + if ( !modelLength ) + { + // If manufacturer name wasn't found add platform name + aPhoneModel.Append( KSVPS60 ); + } + + CleanupStack::PopAndDestroy( 2, &file ); // phoneModel, file + } + +// End of file