--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/authorisation/userpromptservice/test/tups/src/tupsdbmanagementstep.cpp Thu Sep 10 14:01:51 2009 +0300
@@ -0,0 +1,667 @@
+/*
+* Copyright (c) 2007-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:
+*
+*/
+
+
+#include "tupsdbmanagementstep.h"
+#include "tupsintegdefs.h"
+#include "upstypes.h"
+
+using namespace UserPromptService;
+
+_LIT(KOperationCreateView, "CreateView");
+_LIT(KOperationCancelCloseView, "CancelCloseView");
+_LIT(KOperationNextMatch, "NextMatch");
+_LIT(KOperationRemoveDecision, "RemoveDecision");
+_LIT(KOperationUpdateDecisionAllow, "UpdateDecisionAllow");
+_LIT(KOperationUpdateDecisionDeny, "UpdateDecisionDeny");
+_LIT(KOperationCancelUpdate, "CancelUpdate");
+_LIT(KOperationDeleteDatabase, "DeleteDatabase");
+_LIT(KOperationDecisionCount, "DecisionCount");
+
+
+CUpsDbRequest* CUpsDbRequest::NewL()
+ {
+ CUpsDbRequest* me = new (ELeave) CUpsDbRequest();
+ CleanupStack::PushL(me);
+ me->ConstructL();
+ CleanupStack::Pop(me);
+ return me;
+ }
+
+CUpsDbRequest::~CUpsDbRequest()
+ {
+ delete iDecisionFilter;
+ }
+
+CUpsDbRequest::CUpsDbRequest()
+ :iOperation(0), iClientSid(0), iEvaluatorId(0), iServiceId(0), iServerSid(0), iFingerprint(0),
+ iClientEntity(0), iDescription(0), iDecisionResult(0), iMajorPolicyVersion(0), iRecordId(0), iEvaluatorInfo(0), iExpectedDecisionCount(0)
+ {
+ }
+
+void CUpsDbRequest::ConstructL()
+ {
+ iDecisionFilter = CDecisionFilter::NewL();
+ }
+
+CUPSDbManagementStep::CUPSDbManagementStep()
+ {
+ SetTestStepName(KUPSDbManagementStep);
+ }
+
+CUPSDbManagementStep::~CUPSDbManagementStep()
+ {
+ iUpsManager.CancelAndCloseView();
+ iUpsManager.Close();
+ iArraySersToRequest.ResetAndDestroy();
+ INFO_PRINTF2(_L("END CELLS: %d"), User::CountAllocCells());
+ __UHEAP_MARKEND;
+ }
+
+TVerdict CUPSDbManagementStep::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ {
+ __UHEAP_MARK;
+
+ INFO_PRINTF2(_L("START CELLS: %d"), User::CountAllocCells());
+
+ // reads client name and SID
+ TParse clientFullName;
+ RThread client;
+ clientFullName.Set(client.FullName(),NULL, NULL);
+ iTEFServerName=clientFullName.Name();
+ iExpectedClientSid = client.SecureId() ;
+ client.Close();
+
+ // Read how many times the test step needs to be repeated.
+ TName fStepRepeat(_L("StepRepeat"));
+ TInt repeats;
+
+ if(GetIntFromConfig(ConfigSection(),fStepRepeat,repeats))
+ {
+ iStepRepeat=repeats;
+ }
+ else
+ {
+ iStepRepeat=1;
+ }
+
+ // Read values for test sequence from INI file. (ARRAY of values)
+ TInt index=0;
+ TName fOperation;
+ fOperation.Format(_L("Operation_%d"), index);
+ TName fClientSid;
+ fClientSid.Format(_L("ClientSid_%d"),index);
+ TName fEvaluatorId;
+ fEvaluatorId.Format(_L("EvaluatorId_%d"),index);
+ TName fServiceId;
+ fServiceId.Format(_L("ServiceId_%d"),index);
+ TName fServerSid;
+ fServerSid.Format(_L("ServerSid_%d"),index);
+ TName fFingerprint;
+ fFingerprint.Format(_L("Fingerprint_%d"),index);
+ TName fClientEntity;
+ fClientEntity.Format(_L("ClientEntity_%d"),index);
+ TName fDescription;
+ fDescription.Format(_L("Description_%d"),index);
+ TName fDecisionResult;
+ fDecisionResult.Format(_L("DecisionResult_%d"),index);
+ TName fMajorPolicyVersion;
+ fMajorPolicyVersion.Format(_L("MajorPolicyVersion_%d"),index);
+ TName fRecordId;
+ fRecordId.Format(_L("RecordId_%d"),index);
+ TName fEvaluatorInfo;
+ fEvaluatorInfo.Format(_L("EvaluatorInfo_%d"),index);
+ TName fExpectedDecisionCount;
+ fExpectedDecisionCount.Format(_L("ExpectedDecisionCount_%d"),index);
+
+ TPtrC operation;
+ TInt clientSid;
+ TInt evaluatorId;
+ TInt serviceId;
+ TInt serverSid;
+ TPtrC fingerprint;
+ TPtrC clientEntity;
+ TPtrC description;
+ TPtrC decisionResult;
+ TInt majorPolicyVersion;
+ TInt recordId;
+ TInt evaluatorInfo;
+ TInt expectedDecisionCount;
+
+ while (GetStringFromConfig(ConfigSection(),fOperation,operation))
+ {
+
+ // Create an instance of a new request
+ CUpsDbRequest* newRequest = CUpsDbRequest::NewL();
+ CleanupStack::PushL(newRequest);
+
+ // Set the operation to be performed
+ newRequest->iOperation = operation;
+
+ if(GetHexFromConfig(ConfigSection(),fClientSid,clientSid))
+ {
+ newRequest->iClientSid = clientSid;
+ newRequest->iDecisionFilter->SetClientSid(TSecureId(clientSid),EEqual);
+ }
+
+ if(GetHexFromConfig(ConfigSection(),fEvaluatorId,evaluatorId))
+ {
+ newRequest->iEvaluatorId = evaluatorId;
+ newRequest->iDecisionFilter->SetEvaluatorId(TUid::Uid(evaluatorId),EEqual);
+ }
+
+ if(GetHexFromConfig(ConfigSection(),fServiceId,serviceId))
+ {
+ newRequest->iServiceId = serviceId;
+ newRequest->iDecisionFilter->SetServiceId(TUid::Uid(serviceId),EEqual);
+ }
+
+ if(GetHexFromConfig(ConfigSection(),fServerSid,serverSid))
+ {
+ newRequest->iServerSid = serverSid;
+ newRequest->iDecisionFilter->SetServerSid(TSecureId(serverSid),EEqual);
+ }
+
+ if(GetStringFromConfig(ConfigSection(),fFingerprint,fingerprint))
+ {
+ HBufC8* fingerprintConverter = HBufC8::NewLC(fingerprint.Length());
+ TPtr8 fingerprintPtr = fingerprintConverter->Des();
+ fingerprintPtr.Copy(fingerprint);
+
+ newRequest->iFingerprint = fingerprintPtr;
+
+ HBufC8* binaryFingerprint = StringToBinaryLC(fingerprintPtr);
+
+ newRequest->iDecisionFilter->SetFingerprintL(*binaryFingerprint,EEqual);
+ CleanupStack::PopAndDestroy(binaryFingerprint);
+ CleanupStack::PopAndDestroy(fingerprintConverter);
+ }
+
+ if(GetStringFromConfig(ConfigSection(),fClientEntity,clientEntity))
+ {
+ HBufC8* clientEntityConverter = HBufC8::NewLC(clientEntity.Length());
+ TPtr8 clientEntityPtr = clientEntityConverter->Des();
+ clientEntityPtr.Copy(clientEntity);
+
+ newRequest->iClientEntity = clientEntityPtr;
+ newRequest->iDecisionFilter->SetClientEntityL(clientEntityPtr,EEqual);
+ CleanupStack::PopAndDestroy(clientEntityConverter);
+ }
+
+ if(GetStringFromConfig(ConfigSection(),fDescription,description))
+ {
+ newRequest->iDescription = description;
+ }
+
+ if(GetStringFromConfig(ConfigSection(),fDecisionResult,decisionResult))
+ {
+ if(decisionResult.CompareF(_L("Yes"))==0 || decisionResult.CompareF(_L("No"))==0 || decisionResult.CompareF(_L(""))==0 )
+ {
+ newRequest->iDecisionResult = decisionResult;
+ }
+ else
+ {
+ ERR_PRINTF3(_L("%S: Unexpected Decision Result - %S"),&iTEFServerName, &decisionResult);
+ }
+ }
+
+ if(GetIntFromConfig(ConfigSection(),fMajorPolicyVersion,majorPolicyVersion))
+ {
+ newRequest->iMajorPolicyVersion = majorPolicyVersion;
+ newRequest->iDecisionFilter->SetMajorPolicyVersion(majorPolicyVersion,EEqual);
+ }
+
+ if(GetIntFromConfig(ConfigSection(),fRecordId,recordId))
+ {
+ newRequest->iRecordId = recordId;
+ newRequest->iDecisionFilter->SetRecordId(recordId,EEqual);
+ }
+
+ if(GetIntFromConfig(ConfigSection(),fEvaluatorInfo,evaluatorInfo))
+ {
+ newRequest->iEvaluatorInfo = evaluatorInfo;
+ }
+
+ if(GetIntFromConfig(ConfigSection(),fExpectedDecisionCount,expectedDecisionCount))
+ {
+ newRequest->iExpectedDecisionCount = expectedDecisionCount;
+ }
+
+ // Add the new service to be requested to array.
+ iArraySersToRequest.AppendL(newRequest);
+
+ CleanupStack::Pop(newRequest);
+
+ index++;
+ fOperation.Format(_L("Operation_%d"), index);
+ fClientSid.Format(_L("ClientSid_%d"),index);
+ fEvaluatorId.Format(_L("EvaluatorId_%d"),index);
+ fServiceId.Format(_L("ServiceId_%d"),index);
+ fServerSid.Format(_L("ServerSid_%d"),index);
+ fFingerprint.Format(_L("Fingerprint_%d"),index);
+ fClientEntity.Format(_L("ClientEntity_%d"),index);
+ fDescription.Format(_L("Description_%d"),index);
+ fDecisionResult.Format(_L("DecisionResult_%d"),index);
+ fMajorPolicyVersion.Format(_L("MajorPolicyVersion_%d"),index);
+ fRecordId.Format(_L("RecordId_%d"),index);
+ fEvaluatorInfo.Format(_L("EvaluatorInfo_%d"),index);
+ fExpectedDecisionCount.Format(_L("ExpectedDecisionCount_%d"),index);
+ }
+
+ SetTestStepResult(EPass);
+ return TestStepResult();
+ }
+
+TVerdict CUPSDbManagementStep::doTestStepL()
+ {
+ // Connect to the UPS Manager
+ User::LeaveIfError(iUpsManager.Connect());
+
+ // loop to request for different test services.
+ SetTestStepResult(EPass);
+ TInt numServicesToRequest = iArraySersToRequest.Count();
+
+ if(numServicesToRequest > 0)
+ {
+ // repeats the sequence of test services request as many times as specified in iStepRepeat
+ for(TInt repeatTimes = 0;repeatTimes<iStepRepeat;++repeatTimes)
+ {
+
+ INFO_PRINTF3(_L("%S: Repeat number: %d"),&iTEFServerName,repeatTimes);
+
+ for(TInt index=0;index < numServicesToRequest; ++index )
+ {
+
+ INFO_PRINTF4(_L("%S: Database Request: %d, Command: %S"),&iTEFServerName, index, &iArraySersToRequest[index]->iOperation);
+
+ TRequestStatus requestStatus;
+
+ TPtrC op(iArraySersToRequest[index]->iOperation);
+
+ // *** CREATE VIEW ***
+ if (!op.CompareF(KOperationCreateView))
+ {
+ // Create view using the Decision Filter for the Request
+ iUpsManager.CreateView(*iArraySersToRequest[index]->iDecisionFilter,requestStatus);
+
+ User::WaitForRequest(requestStatus);
+
+ if(requestStatus != KErrNone)
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF3(_L("%S: Create View Failure - %d"),&iTEFServerName,requestStatus.Int());
+ User::Leave(requestStatus.Int());
+ }
+ }
+ // *** CANCEL CLOSE VIEW ***
+ else if (!op.CompareF(KOperationCancelCloseView))
+ {
+ iUpsManager.CancelAndCloseView();
+
+ INFO_PRINTF2(_L("%S: UPS DB Management - Current View Cancelled and Closed"),&iTEFServerName);
+ }
+ // *** NEXT MATCH ***
+ else if (!op.CompareF(KOperationNextMatch))
+ {
+ CDecisionRecord* record = NULL;
+
+ // Retrieve the Next Decision according to the Current View
+ record = iUpsManager.NextMatchL();
+ CleanupStack::PushL(record);
+
+ // If a record is found, check that the record matches any data specified in the INI
+ if(record != NULL)
+ {
+ if(CheckDecisionRecordL(index,*record) == EFalse)
+ {
+ iUpsManager.CancelAndCloseView();
+ ERR_PRINTF2(_L("%S: Incorrect Results"),&iTEFServerName);
+ User::Leave(KErrGeneral);
+ }
+ }
+ else
+ {
+ iUpsManager.CancelAndCloseView();
+ SetTestStepResult(EFail);
+ ERR_PRINTF2(_L("%S: NextMatchL - No Decision Retrieved"),&iTEFServerName);
+ User::Leave(KErrEof);
+ }
+
+ CleanupStack::PopAndDestroy(record);
+
+ }
+ // *** REMOVE DECISION ***
+ else if (!op.CompareF(KOperationRemoveDecision))
+ {
+ // Remove decisions from the database based on the contents of the Decision Filter
+ TRAPD(err, iUpsManager.RemoveDecisionsL(*iArraySersToRequest[index]->iDecisionFilter));
+
+ if(err == KErrNone)
+ {
+ INFO_PRINTF2(_L("%S: Remove Decision - Decision(s) Successfully Removed"),&iTEFServerName);
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF3(_L("%S: ** Error ** Remove Decision Failure - %d"),&iTEFServerName,err);
+ User::Leave(err);
+ }
+ }
+ // *** UPDATE DECISION ALLOW ***
+ else if (!op.CompareF(KOperationUpdateDecisionAllow))
+ {
+ iUpsManager.UpdateDecision(iArraySersToRequest[index]->iRecordId, ETrue, requestStatus);
+
+ User::WaitForRequest(requestStatus);
+
+ if(requestStatus != KErrNone)
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF3(_L("%S: Update Decision 'Allow' Failure - %d"),&iTEFServerName,requestStatus.Int());
+ User::Leave(requestStatus.Int());
+ }
+ }
+ // *** UPDATE DECISION DENY ***
+ else if (!op.CompareF(KOperationUpdateDecisionDeny))
+ {
+ iUpsManager.UpdateDecision(iArraySersToRequest[index]->iRecordId, EFalse, requestStatus);
+
+ User::WaitForRequest(requestStatus);
+
+ if(requestStatus != KErrNone)
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF3(_L("%S: Update Decision 'Deny' Failure - %d"),&iTEFServerName,requestStatus.Int());
+ User::Leave(requestStatus.Int());
+ }
+ }
+ // *** CANCEL DECISION UPDATE ***
+ else if (!op.CompareF(KOperationCancelUpdate))
+ {
+ iUpsManager.CancelUpdateDecision();
+
+ INFO_PRINTF2(_L("%S: UPS DB Management - Current Decision Update Cancelled"),&iTEFServerName);
+ }
+ // *** DELETE DATABASE ***
+ else if (!op.CompareF(KOperationDeleteDatabase))
+ {
+ // Delete the contents of the Decision Database
+ TRAPD(err, iUpsManager.DeleteDatabaseL());
+
+ if(err == KErrNone)
+ {
+ INFO_PRINTF2(_L("%S: UPS DB Management - Database Deleted"),&iTEFServerName);
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF3(_L("%S: ** Error ** Database Deletion Failure - %d"),&iTEFServerName,err);
+ User::Leave(err);
+ }
+ }
+ // *** DECISION COUNT ***
+ else if (!op.CompareF(KOperationDecisionCount))
+ {
+ iUpsManager.CancelAndCloseView();
+
+ // Create a new view using the constructed decision filter for the request
+ iUpsManager.CreateView(*iArraySersToRequest[index]->iDecisionFilter,requestStatus);
+
+ User::WaitForRequest(requestStatus);
+
+ if(requestStatus.Int() == KErrNone)
+ {
+ TInt decisionCount = 0;
+ CDecisionRecord* record = NULL;
+
+ TInt result = KErrNone;
+
+ // Whilst records located using the "NextMatchL" method, increment the record count
+ while(result == KErrNone)
+ {
+ TRAP(result, record = iUpsManager.NextMatchL());
+
+ if(record == NULL)
+ {
+ break;
+ }
+ else
+ {
+ ++decisionCount;
+ }
+
+ delete record;
+ record = NULL;
+ }
+
+ iUpsManager.CancelAndCloseView();
+
+ if(decisionCount != iArraySersToRequest[index]->iExpectedDecisionCount)
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF2(_L("%S: Decision Count - Unexpected Number of Database Decisions"),&iTEFServerName);
+ ERR_PRINTF3(_L("%S: Decisions expected: %d"),&iTEFServerName,iArraySersToRequest[index]->iExpectedDecisionCount);
+ ERR_PRINTF3(_L("%S: Decisions in Database: %d"),&iTEFServerName,decisionCount);
+ User::Leave(KErrNotFound);
+ }
+
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF3(_L("%S: Decision Count - Create View Failure - %d"),&iTEFServerName,requestStatus.Int());
+ User::Leave(requestStatus.Int());
+ }
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF2(_L("%S: Invalid operation"),&iTEFServerName);
+ User::Leave(KErrNotSupported);
+ }
+
+ } // End of second loop
+ }// End of first loop
+
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ ERR_PRINTF2(_L("%S: Problem reading ini file"),&iTEFServerName);
+ User::Leave(KErrGeneral);
+ }
+
+ return TestStepResult();
+ } // End of function
+
+
+TVerdict CUPSDbManagementStep::doTestStepPostambleL()
+ {
+ return TestStepResult();
+ }
+
+
+TBool CUPSDbManagementStep::CheckDecisionRecordL(TInt aIndex, const CDecisionRecord& aRecord)
+/**
+ * Checks the expected record values against those stored within CDecisionRecord retrieved from the database
+ *
+ * @param - TInt aIndex: Database request index used to access the required instance of CUpsDbRequest held
+ * within the request array
+ * @param - const CDecisionRecord& aRecord: Decision Record retrieved from the database
+ * @return - TBool: Boolean to determine the result of the value checks (ETrue = Pass, EFalse = Fail)
+ **/
+ {
+
+ TBool checkPassed = ETrue;
+
+
+ if(iArraySersToRequest[aIndex]->iClientSid != aRecord.iClientSid)
+ {
+ ERR_PRINTF2(_L("%S: 'Client SID' value mismatch"),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ if(iArraySersToRequest[aIndex]->iEvaluatorId != aRecord.iEvaluatorId.iUid)
+ {
+ ERR_PRINTF2(_L("%S: 'Evaluator ID' value mismatch"),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ if(iArraySersToRequest[aIndex]->iServiceId != aRecord.iServiceId.iUid)
+ {
+ ERR_PRINTF2(_L("%S: 'Service ID' value mismatch"),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ if(iArraySersToRequest[aIndex]->iServerSid != aRecord.iServerSid)
+ {
+ ERR_PRINTF2(_L("%S: 'Server SID' value mismatch"),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ HBufC8* recordFingerprint = StringToHexLC(aRecord.iFingerprint);
+
+ if(iArraySersToRequest[aIndex]->iFingerprint != *recordFingerprint)
+ {
+ HBufC* expectedFingerprint = HBufC::NewLC(iArraySersToRequest[aIndex]->iFingerprint.Length());
+ HBufC* receivedFingerprint = HBufC::NewLC(recordFingerprint->Length());
+
+ expectedFingerprint->Des().Copy(iArraySersToRequest[aIndex]->iFingerprint);
+ receivedFingerprint->Des().Copy(*recordFingerprint);
+
+ ERR_PRINTF2(_L("%S: 'Fingerprint' value mismatch."),&iTEFServerName);
+ ERR_PRINTF3(_L("%S: Fingerprint expected: %S"),&iTEFServerName,expectedFingerprint);
+ ERR_PRINTF3(_L("%S: Fingerprint received: %S"),&iTEFServerName,receivedFingerprint);
+
+ CleanupStack::PopAndDestroy(receivedFingerprint);
+ CleanupStack::PopAndDestroy(expectedFingerprint);
+ checkPassed = EFalse;
+ }
+
+ CleanupStack::PopAndDestroy(recordFingerprint);
+
+ if(iArraySersToRequest[aIndex]->iClientEntity != aRecord.iClientEntity)
+ {
+ HBufC* expectedClientEntity = HBufC::NewLC(iArraySersToRequest[aIndex]->iClientEntity.Length());
+ HBufC* receivedClientEntity = HBufC::NewLC(aRecord.iClientEntity.Length());
+
+ expectedClientEntity->Des().Copy(iArraySersToRequest[aIndex]->iClientEntity);
+ receivedClientEntity->Des().Copy(aRecord.iClientEntity);
+
+ ERR_PRINTF2(_L("%S: 'Client Entity' value mismatch."),&iTEFServerName);
+
+ CleanupStack::PopAndDestroy(receivedClientEntity);
+ CleanupStack::PopAndDestroy(expectedClientEntity);
+ checkPassed = EFalse;
+ }
+
+ if(iArraySersToRequest[aIndex]->iDescription.CompareF(aRecord.iDescription) != 0)
+ {
+ TPtrC retrievedDescription(aRecord.iDescription);
+ ERR_PRINTF2(_L("%S: 'Description' value mismatch."),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ TInt expectedDecisionResult = 0;
+
+ if(iArraySersToRequest[aIndex]->iDecisionResult.CompareF(_L("Yes")) == 0)
+ {
+ expectedDecisionResult = 1;
+ }
+
+ if(expectedDecisionResult != aRecord.iResult)
+ {
+ ERR_PRINTF2(_L("%S: 'Decision Result' value mismatch."),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ if(iArraySersToRequest[aIndex]->iMajorPolicyVersion != aRecord.iMajorPolicyVersion)
+ {
+ ERR_PRINTF2(_L("%S: 'Major Policy Version' value mismatch."),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ if(iArraySersToRequest[aIndex]->iEvaluatorInfo != aRecord.iEvaluatorInfo)
+ {
+ ERR_PRINTF2(_L("%S: 'Evaluator Info' value mismatch."),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ if(iArraySersToRequest[aIndex]->iRecordId != aRecord.iRecordId)
+ {
+ ERR_PRINTF2(_L("%S: 'Record ID' value mismatch."),&iTEFServerName);
+ checkPassed = EFalse;
+ }
+
+ return checkPassed;
+ }
+
+
+
+HBufC8* CUPSDbManagementStep::StringToHexLC(const TDes8 &aString)
+/**
+ * Function to convert the contents of a TDes8 into a Hexadecimal format
+ *
+ * @param - cosnt TDes8 aString: String to convert into Hexadecimal
+ * @return - HBufC8*: Converted Hexadecial string representation
+ **/
+ {
+ HBufC8* parsedString = HBufC8::NewLC(aString.Length()*2);
+ TBuf8<2> pair;
+ _LIT8(KFormatHex,"%02x");
+
+ TPtr8 ptr(parsedString->Des());
+ for(TInt i = 0; i<aString.Length() ; i++)
+ {
+ TInt num = (aString)[i];
+ pair.Format(KFormatHex,num);
+ ptr.Append(pair);
+ }
+
+ return parsedString;
+ }
+
+
+HBufC8* CUPSDbManagementStep::StringToBinaryLC(const TDes8 &aString)
+/**
+ * Function to convert the contents of a TDes8 into a Binary format
+ *
+ * @param - cosnt TDes8 aString: String to convert into Hexadecimal
+ * @return - HBufC8*: Converted Binary string representation
+ **/
+ {
+ HBufC8* parsedString = HBufC8::NewLC(aString.Length()/2);
+ TBuf8<1> binChar;
+ _LIT8(KFormatBinary,"%c");
+
+ TPtr8 ptr(parsedString->Des());
+ for(TInt i = 0; i<aString.Length()/2 ; i++)
+ {
+ TPtrC8 tempPtr(aString.Mid(i*2,2));
+ TLex8 lex(tempPtr);
+ TUint val=0;
+ lex.Val(val, EHex);
+ binChar.Format(KFormatBinary,val);
+ ptr.Append(binChar);
+ }
+
+ return parsedString;
+ }