testconns/statapi/device/source/statapi/src/dataconsumer_memory.cpp
changeset 4 b8d1455fddc0
--- /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 <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+
+/*************************************************************************
+ *
+ * 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 );
+	}