diff -r 000000000000 -r bde4ae8d615e os/security/cryptomgmtlibs/securitytestfw/test/testhandler2/t_output.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/security/cryptomgmtlibs/securitytestfw/test/testhandler2/t_output.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,253 @@ +/* +* Copyright (c) 1998-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 "t_output.h" +#include <securityerr.h> + +// Size used for stack based buffers +const static TInt KMaxLineLength = 200; + +_LIT(KNewLine, "\r\n"); + +// Output ////////////////////////////////////////////////////////////////////// + +EXPORT_C void Output::writeString(const TDesC& aString) + { + FixNewlinesAndWriteL(aString); + } + +EXPORT_C void Output::writeString(const TDesC8& aString) + { + HBufC16* des = HBufC16::NewLC(aString.Length()); + des->Des().Copy(aString); + FixNewlinesAndWriteL(*des); + CleanupStack::PopAndDestroy(des); + } + +EXPORT_C void Output::write(TRefByValue<const TDesC16> aFmt, ...) + { + TBuf<KMaxLineLength> buf; + VA_LIST args; + VA_START(args, aFmt); + buf.AppendFormatList(aFmt, args); + VA_END(args); + + FixNewlinesAndWriteL(buf); + } + +EXPORT_C void Output::writeSpaces(TInt aNum) + { + for (TInt i = 0; i < aNum; i++) + { + DoWriteL(_L(" ")); + } + } + +EXPORT_C void Output::writeNewLine() + { + DoWriteL(KNewLine); + } + +EXPORT_C void Output::writeNum(TInt aNum) + { + write(_L("%d"), aNum); + } + +EXPORT_C void Output::writeHex(TInt aHex) + { + write(_L("%x"), aHex); + } + +EXPORT_C void Output::writeError(TInt aError) + { + switch (aError) + { + case KErrNone: // 0 + DoWriteL(_L("KErrNone")); + break; + + case KErrNotFound: // -1 + DoWriteL(_L("KErrNotFound")); + break; + + case KErrNotSupported: // -5 + DoWriteL(_L("KErrNotSupported")); + break; + + case KErrInUse: // -14 + DoWriteL(_L("KErrInUse")); + break; + + case KErrNotReady: // -18 + DoWriteL(_L("KErrNotReady")); + break; + + case KRequestPending: + DoWriteL(_L("KRequestPending")); + break; + + case KErrAlreadyExists: + DoWriteL(_L("KErrAlreadyExists")); + break; + + case KErrArgument: + DoWriteL(_L("KErrArgument")); + break; + + case KErrBadName: // -28 + DoWriteL(_L("KErrBadName")); + break; + case KErrPrivateKeyNotFound: + writeString(_L("KErrPrivateKeyNotFound")); + break; + + default: + writeNum(aError); + break; + } + } + +EXPORT_C void Output::writeOctetString(const TDesC8& aString) + { + writeOctetStringL(aString); + } + +EXPORT_C void Output::writeOctetStringL(const TDesC8& aString) + { + TInt len = aString.Length(); + HBufC* buf = HBufC::NewLC(len * 3); + TPtr pBuf = buf->Des(); + for (TInt index = 0; index < len; ++index) + { + pBuf.AppendFormat(_L("%02x "),aString[index]); + } + DoWriteL(*buf); + CleanupStack::PopAndDestroy(buf); + } + +EXPORT_C void Output::writeBoolL(TBool aBool) + { + if (aBool) + { + DoWriteL(_L("ETrue")); + } + else + { + DoWriteL(_L("EFalse")); + } + } + +// Fix up newlines by turning any occurences of just "\n" into "\r\n". +void Output::FixNewlinesAndWriteL(const TDesC& aString) + { + TPtrC remainder(aString); + TInt index = 0; + while (remainder.Length()) + { + index = remainder.Locate('\n'); + + if (index == KErrNotFound) + { + DoWriteL(remainder); + break; + } + + if (index == 0) + { + DoWriteL(KNewLine); + } + else + { + if (remainder[index - 1] == '\r') + { + DoWriteL(remainder.Left(index + 1)); + } + else + { + DoWriteL(remainder.Left(index)); + DoWriteL(KNewLine); + } + } + remainder.Set(remainder.Mid(index + 1)); + } + } + +// writeCapabilityL, writeCapabilitySetL, writeSecurityPolicyL implemented in +// t_capability.cpp + +// NullOutput ////////////////////////////////////////////////////////////////// + +EXPORT_C NullOutput::NullOutput() + { + } + +void NullOutput::DoWriteL(const TDesC& /*aString*/) + { + } + +// FileOutput ////////////////////////////////////////////////////////////////// + +EXPORT_C FileOutput::FileOutput(RFile& aFile) : + iFile(aFile) + { + } + +void FileOutput::DoWriteL(const TDesC& aString) + { + TBuf8<KMaxLineLength> buf; + buf.Copy(aString.Left(KMaxLineLength)); + User::LeaveIfError(iFile.Write(buf)); + User::LeaveIfError(iFile.Flush()); // Commit data + } + +// ConsoleOutput /////////////////////////////////////////////////////////////// + +EXPORT_C ConsoleOutput::ConsoleOutput(CConsoleBase& aConsole) : + iConsole(aConsole) + { + } + +void ConsoleOutput::DoWriteL(const TDesC& aString) + { + iConsole.Printf(aString); + } + +// COutputTee ////////////////////////////////////////////////////////////////// + +COutputTee::COutputTee() + { + } + +COutputTee::~COutputTee() + { + iChildren.ResetAndDestroy(); + } + +void COutputTee::AddChildL(Output* aChild) + { + User::LeaveIfError(iChildren.Append(aChild)); + } + +void COutputTee::DoWriteL(const TDesC& aString) + { + for (TInt i = 0 ; i < iChildren.Count() ; ++i) + { + iChildren[i]->writeString(aString); + } + } +