secureswitools/swianalysistoolkit/source/common/streamreader.h
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/source/common/streamreader.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,124 @@
+/*
+* 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 the License "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: 
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent 
+*/
+
+#ifndef	__STREAMREADER_H__
+#define	__STREAMREADER_H__
+
+#ifdef DUMPSWICERTSTORETOOL
+#include "pfsdump.h"
+#include "options.h"
+#endif
+
+#ifdef DUMPSWIREGISTRYTOOL
+#include "options.h"
+#include "dumpswiregistrytool.h"
+#include <fstream>
+#endif
+
+#include <iostream>
+using std::istream;
+
+class Stream;
+
+/**
+ * The StreamReader class provides functions which reads 8 bit , 16 bit , 32 bit values and 
+ * descriptors from a given stream.
+ * @internalComponent 
+ */
+
+class StreamReader
+{
+public:
+
+	StreamReader(istream& aFile);
+
+	StreamReader(const char* aRegFile);
+
+	~StreamReader();
+
+	/**
+	  This method determines the length of the file and reads the data as a block into a buffer,
+	  also checks whether file is empty .
+	  @return	true	If file is empty.
+	  */  
+	bool Initialise();
+
+	/**
+	  Reads 32 bit value from the stream and interprets it as an unsigned int.
+	  */
+	unsigned int ReadInt32();
+
+	/**
+	  Reads 16 bit value from the stream and interprets it as an unsigned short int.
+	  */
+	unsigned short int ReadInt16();
+
+	/**
+	  Reads 8 bit value from the stream and interprets it as an unsigned char.
+	  */
+	unsigned char ReadInt8();
+
+	/**Overloaded function used to obtain the length and type (ascii or unicode) of a descriptor . 
+	   @param	aIsWide				Set,if descriptor is in unicode format.
+	   @param	aConstReadPtr		In case where only length of the descriptor has to be determined,
+									the pointer should be rewinded back to beginning of the descriptor,which is the 
+									case when aConstReadPtr is set.
+	   @return	Length of the descriptor.
+	  */
+	int GetDescriptorInfo(bool& aIsWide, const bool& aConstReadPtr = false);
+
+	/**
+	  Reads the descriptor.
+	  */
+
+	char* ReadDescriptor();
+	
+	/**
+	  This function reads the first 8 bits of the descriptor and returns the cardinality value, 
+	  based on which the length of string can be obtained. After the peek function reads the 
+	  cardinality value it will rewind back the position at the beginning of descriptor to be read.
+	 */  
+	unsigned char Peek();	
+
+	
+	/**
+	  This method creates a target descriptor to hold the resultant utf8 descriptor and 
+	  calls method which converts utf16 descriptor to utf8 descriptor.
+	  @param	aSource		utf16 encoded descriptor.
+	  @param	aSrcLength	Length of the utf16 encoded descriptor.	
+	  
+	 */
+	char* UTF16toUTF8Convert(wchar_t* aSource, int aSrcLength);
+
+
+private:
+
+	istream* iFileStream;
+	//streamOwnership is to differentiate between dumpswicertstoretool and  dumpswiregistrytool.
+	//true for dumpswiregistrytool.
+	char* iBuf;
+	char* iCurrentPos;
+	int iLength;
+	bool iStreamOwnership;
+};
+#endif