--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/ocsp/test/TEFparser.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,356 @@
+//
+// Copyright (c) 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:
+//
+
+
+#include <s32file.h>
+#include "bautils.h"
+#include "TEFparser.h"
+#include "utf.h"
+
+_LIT(KReturn, "\r");
+_LIT(KNewline, "\n");
+_LIT(KOpenBrk, "[");
+_LIT(KCloseBrk, "]");
+_LIT(KSpace, " ");
+_LIT(KTab, "\t");
+
+_LIT(KIniExtension, ".ini");
+_LIT(KScriptFile, ".script");
+_LIT(KDot, ".");
+
+#define KIniSectionIdLength 512
+
+
+EXPORT_C TBool TEFparser::FileType(const TDesC& aBuf)
+ {
+
+ TInt pos1 = aBuf.Find(KDot);
+
+ TPtrC fileType = aBuf.Mid(pos1);
+
+ if(fileType == KScriptFile)
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+EXPORT_C TInt TEFparser::ReadFileLC(RFs& aFs,
+ const TDesC& aScriptFilepath,
+ TPtrC& aScriptFileContents )
+ {
+
+ RFile scriptFile;
+ TInt err = scriptFile.Open(aFs, aScriptFilepath, EFileStream | EFileRead | EFileShareAny);
+ if (err != KErrNone)
+ {
+ return KErrNotFound;
+ }
+ // gets size of ini file
+ TInt size;
+ scriptFile.Size(size);
+ scriptFile.Close();
+
+ // reads ini into iTestInput
+ HBufC* scriptFileH16 = HBufC::NewLC(size);
+ HBufC8* scriptFileH = HBufC8::NewLC(size);
+
+ //RBuf scriptFileR;
+ TPtr8 pInput = scriptFileH->Des();
+ TPtr pInput16 = scriptFileH16->Des();
+
+ pInput.SetLength(size);
+
+ RFileReadStream stream;
+ User::LeaveIfError(stream.Open(aFs, aScriptFilepath, EFileStream | EFileRead | EFileShareReadersOnly));
+ CleanupClosePushL(stream);
+ stream.ReadL(pInput,size);
+
+// stream.ReadL(pInput, size);
+
+ pInput16.Copy(pInput);
+ //scriptFileR.Assign(scriptFileH16);
+
+ aScriptFileContents.Set(*scriptFileH16);
+
+ CleanupStack::PopAndDestroy(2); // stream, testInput
+
+ return KErrNone;
+ }
+
+EXPORT_C TPtrC TEFparser::GetRunTestStep(TPtrC& aBuf,
+ const TDesC& aTag,
+ TInt& aPos,
+ TInt& aError)
+ {
+ TInt endPos = 0;
+ TInt startPos = 0;
+ TInt tempPos = 0;
+
+ TPtrC data = aBuf.Mid(aPos);
+
+ tempPos = data.Find(aTag);
+
+ if (tempPos != KErrNotFound)
+ {
+ tempPos += aTag.Length();
+//
+ TPtrC temprunStepData = data.Mid(tempPos);
+//
+ endPos = temprunStepData.Find(KNewline);
+ if (endPos == KErrNotFound)
+ {
+ endPos = temprunStepData.Find(KReturn);
+ }
+ if (endPos == KErrNotFound)
+ {
+ endPos = temprunStepData.Length();
+ }
+//
+ TInt len = 0;
+ len = (endPos - startPos) + 1;
+ TPtrC runStepData = temprunStepData.Mid(startPos,len);
+ aPos += tempPos + runStepData.Length();
+ aError = KErrNone;
+ return Trim(runStepData);
+ }
+ else
+ {
+ aError = KErrNotFound;
+ return TPtrC();
+ }
+
+ }
+
+EXPORT_C TPtrC TEFparser::Trim(const TDesC& aBuf)
+ {
+ TInt startPos = 0;
+ TInt endPos = 0;
+ TInt i = 0, j = 0;
+
+ for(i = 0; i < aBuf.Length() ; i ++)
+ {
+ TPtrC tmpChar = aBuf.Mid(i,1);
+ if(tmpChar != KSpace && tmpChar != KTab && tmpChar != KReturn && tmpChar != KNewline )
+ {
+ startPos = i;
+ break;
+ }
+ }
+ for(j = aBuf.Length()-1; j >= 0 ; j --)
+ {
+ TPtrC tmpChar1 = aBuf.Mid(j,1);
+ if(tmpChar1 != KSpace && tmpChar1 != KTab && tmpChar1 != KReturn && tmpChar1 != KNewline )
+ {
+ endPos = j;
+ break;
+ }
+ }
+ if(endPos < startPos)
+ {
+ endPos = aBuf.Length();
+ }
+
+// TInt len = aBuf.Length() - (startPos + endPos);
+ return aBuf.Mid(startPos, endPos - startPos + 1);
+
+ }
+
+EXPORT_C TInt TEFparser::GetIniFileInfo(TDesC& aBuf,
+ TPtrC& aIniFileName,
+ TPtrC& aIniSectionName)
+ {
+ TInt pos =0;
+ TInt startPos = 0, endPos = 0;
+
+
+ TPtrC temp = aBuf.Mid(pos);
+
+ endPos = temp.Find(KIniExtension);
+ endPos += 4;
+
+ if (endPos != KErrNotFound)
+ {
+ TInt len = endPos - startPos;
+ TPtrC iniFileName = temp.Mid(startPos, len);
+ aIniFileName.Set(iniFileName);
+
+ TPtrC iniSectionName = temp.Mid(iniFileName.Length());
+ aIniSectionName.Set(Trim(iniSectionName));
+
+ return KErrNone;
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+
+ }
+
+EXPORT_C TInt TEFparser::GetiniPath( TDesC& aBuf,
+ const TDesC& aScriptPath,
+ TDes& aIniFilePath)
+ {
+
+ TInt err = KErrNone;
+ TInt endPos = aScriptPath.LocateReverse('\\');
+ if (endPos == KErrNotFound)
+ {
+ err = KErrNotFound;
+ }
+ else
+ {
+ aIniFilePath.Copy(aBuf);
+ aIniFilePath.Insert(0, aScriptPath.Left(endPos+1));
+ }
+ return err;
+ }
+
+EXPORT_C TInt TEFparser::GetSectionData(TDesC& aScriptFilepath, TPtrC& aSectiontag, TDesC16 &aTocspTestFile, RFs& aFs)
+ {
+
+ TInt err = KErrNone;
+ TInt pos = 0;
+ RFile file;
+
+ // open the .ini file
+ if (BaflUtils::FolderExists(aFs, aScriptFilepath))
+ {
+ if (BaflUtils::FileExists( aFs, aScriptFilepath ))
+ {
+ file.Open(aFs, aScriptFilepath, EFileRead | EFileShareAny);
+
+ TFileText aLineReader;
+ TBuf<256> iLine;
+ TBuf<256> tempsectID;
+
+ // create the section name to search for
+ tempsectID.Copy(KOpenBrk);
+ tempsectID.Append(aSectiontag);
+ tempsectID.Append(KCloseBrk);
+
+ // read the ini file a line at a time until you find the the section name
+ aLineReader.Set(file);
+ TInt foundTag = -1;
+ while (err != KErrEof && foundTag != 0)
+ {
+ err = aLineReader.Read(iLine);
+ if (err != KErrEof)
+ foundTag = iLine.Find(tempsectID);
+ }
+
+ // create the next open bracket to search for
+ TBuf<2> tempopenBrk;
+ tempopenBrk.Copy(KOpenBrk);
+
+ RFile testfile;
+ err = KErrNone;
+ foundTag = -1;
+
+ // while not at the end of the file and not found the next open bracket
+ while (err != KErrEof && foundTag != 0)
+ {
+
+ // get the next line of the .ini file
+ err = aLineReader.Read(iLine);
+ if (err != KErrEof)
+ {
+
+ // if the line of the file doesn't contain an open bracket, we are still in the section body
+ foundTag = iLine.Find(tempopenBrk);
+ if (BaflUtils::FolderExists(aFs, aTocspTestFile) && foundTag != 0)
+ {
+ // open the test file we are going to write all our section info into
+ if (BaflUtils::FileExists( aFs, aTocspTestFile ))
+ {
+ testfile.Open(aFs, aTocspTestFile, EFileWrite|EFileShareAny);
+ testfile.Seek(ESeekEnd, pos);
+ }
+ else
+ {
+ User::LeaveIfError(testfile.Create(aFs, aTocspTestFile, EFileWrite|EFileShareAny));
+ testfile.Open(aFs, aTocspTestFile, EFileWrite|EFileShareAny);
+ }
+ // append to line of the file end of line characters
+ iLine.Append(_L("\r\n"));
+
+ // write line of the code out to the test file in UNICODE format
+ TPtrC8 tmpPoint((TText8*)iLine.Ptr(),iLine.Size());
+ testfile.Write(tmpPoint);
+
+ testfile.Flush();
+ }
+ testfile.Close();
+ }
+ }
+ }
+ }
+ return KErrNone;
+
+ }
+
+EXPORT_C TPtrC TEFparser::ParseNthElement(const TDesC& aBuf, TInt aWordPos)
+
+ {
+
+ TInt startPos = KErrNotFound, endPos = KErrNotFound;
+ TInt wordCounter =0 ;
+ TBool inWord = EFalse;
+ TInt i =0;
+
+ for(i = 0; i < aBuf.Length() ; i ++)
+ {
+ TPtrC tmpChar = aBuf.Mid(i,1);
+ if(tmpChar == KSpace || tmpChar == KTab || tmpChar == KReturn || tmpChar == KNewline )
+ {
+ if(inWord)
+ {
+ if(wordCounter == aWordPos)
+ {
+ endPos =i-1;
+ break;
+ }
+ inWord = EFalse;
+ }
+ }
+ else
+ {
+ if(inWord == EFalse)
+ {
+ wordCounter ++;
+ inWord = ETrue;
+ if(wordCounter == aWordPos)
+ {
+ startPos =i;
+ }
+ }
+ }
+ }
+ if(startPos < 0 || endPos < 0)
+ {
+ endPos = aBuf.Length();
+ return aBuf.Mid(startPos,(endPos-startPos));
+ }
+ else
+ {
+ return aBuf.Mid(startPos,(endPos-startPos+1));
+ }
+}
+
+