diff -r 73b88125830c -r b8d1455fddc0 testconns/statapi/device/source/statapi/src/dataconsumer_memory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testconns/statapi/device/source/statapi/src/dataconsumer_memory.cpp Mon Oct 04 02:58:21 2010 +0300 @@ -0,0 +1,267 @@ +/* +* 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: +* +*/ + + + + /************************************************************************* + * + * System Includes + * + *************************************************************************/ + +#include +#include +#include + +/************************************************************************* + * + * Local Includes + * + *************************************************************************/ + +#include "dataconsumer_memory.h" + +/************************************************************************* + * + * Definitions + * + *************************************************************************/ + +/************************************************************************* + * + * CDataConsumerMemory - Construction + * + *************************************************************************/ +CDataConsumerMemory *CDataConsumerMemory::NewL() + { + CDataConsumerMemory *self = new (ELeave) CDataConsumerMemory(); + + CleanupStack::PushL(self); + + self->ConstructL(); + + CleanupStack::Pop(); + + return self; + } + +CDataConsumerMemory::CDataConsumerMemory() : CBase(), + iDataBuffer( NULL ) + { + ; + } + +void CDataConsumerMemory::ConstructL( void ) + { + iLock.CreateLocal( EOwnerProcess ); + } + +CDataConsumerMemory::~CDataConsumerMemory( ) + { + iLock.Wait( ); + { + delete iDataBuffer; + iDataBuffer = NULL; + + iLock.Close( ); + } + } + +/************************************************************************* + * + * CDataConsumerMemory - Public interface + * + *************************************************************************/ + +/************************************************************************* + * + * Delete + * + *************************************************************************/ + +void CDataConsumerMemory::Delete( void ) + { + delete this; + } + +/************************************************************************* + * + * GetTotalSize + * + *************************************************************************/ + +TInt CDataConsumerMemory::GetTotalSize( TInt &aTotalSize ) + { + TInt err = KErrNone; + TInt size = 0; + + iLock.Wait( ); + { + size = iDataBuffer->Length( ); + + aTotalSize = size; + + iLock.Signal( ); + } + + return ( err ); + } + +/************************************************************************* + * + * AddData + * + *************************************************************************/ + +TInt CDataConsumerMemory::AddData( const TDesC8 &aSource ) + { + TInt err = KErrNone; + + iLock.Wait( ); + { + TInt currentLength = 0; + + if(iDataBuffer) + { + currentLength = iDataBuffer->Length( ); + } + + HBufC8 *currentDataBuffer = iDataBuffer; + + TInt srcLength = aSource.Length( ); + TInt length = currentLength + srcLength; + + iDataBuffer = HBufC8::New( length ); + + if(iDataBuffer) + { + TPtr8 destPtr( iDataBuffer->Des( ) ); + + if(currentDataBuffer) + { + destPtr.Copy( currentDataBuffer->Ptr( ), + currentLength ); + delete currentDataBuffer; + currentDataBuffer = NULL; + } + + destPtr.Append( aSource.Ptr( ), srcLength ); + } + else + { + err = KErrNoMemory; + } + + iLock.Signal( ); + } + +#ifdef _DEBUG + { + TInt totalSize = 0; + GetTotalSize( totalSize ); + } +#endif + + return ( err ); + } + +/************************************************************************* + * + * GetData + * + *************************************************************************/ + +TInt CDataConsumerMemory::GetData( HBufC8 &aDestination ) + { + TInt err = KErrNone; + + iLock.Wait( ); + { + TInt currentLength = 0; + + if(iDataBuffer) + { + currentLength = iDataBuffer->Length( ); + + TPtr8 destPtr( aDestination.Des( ) ); + destPtr.Copy( iDataBuffer->Ptr( ), currentLength ); + } + + iLock.Signal( ); + } + + return ( err ); + } + +/************************************************************************* + * + * SaveData + * + *************************************************************************/ + +TInt CDataConsumerMemory::SaveData( const TDesC &filePath ) + { + TInt err = KErrNone; + RFs FsSession; + + err = FsSession.Connect( ); + + if( err == KErrNone ) + { + iLock.Wait( ); + { + RFile file; + TInt shareMode = EFileWrite | EFileStream | EFileShareExclusive; + + err = file.Open( FsSession, filePath, shareMode ); + + if( err == KErrNotFound ) + { + err = file.Create( FsSession, filePath, shareMode ); + } + + if( err == KErrNone ) + { + + if( NULL != iDataBuffer ) + { + err = file.Write( iDataBuffer->Des( ) ); + } + + file.Flush( ); + file.Close( ); + } + + iLock.Signal( ); + } + + FsSession.Close( ); + } + + return ( err ); + } + +/************************************************************************* + * + * operator const TDesC8& + * + *************************************************************************/ + +CDataConsumerMemory::operator const TDesC8&( void ) const + { + return ( *iDataBuffer ); + }