--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikecert/inc/vpnlogger.inl Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,359 @@
+/*
+* Copyright (c) 2007 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: Logging code fot the dmadpki
+*
+*/
+
+
+
+
+#if defined(_DEBUG)
+
+
+_LIT(KTraceOutOfMemory, "TRACE out of memory");
+
+_LIT(KInMark, ">");
+_LIT(KOutMark, "<");
+_LIT(KDepthMark, "-");
+_LIT(KSeparator, " ");
+_LIT(KLeaveFrom, "LEAVE FROM: ");
+
+
+
+void TTraceItem::TraceCleanupOperation(TAny* aItem)
+ {
+
+ TTraceItem* traceCleanupItem = static_cast<TTraceItem*>(aItem);
+ CVpnDebugLogger* logger = CVpnDebugLogger::VpnDebugLogger();
+ logger->iCallDepth--;
+
+ logger->iDebugString.Zero();
+
+ CVpnDebugLogger::TimeStamp(logger->iDebugString);
+ logger->iDebugString.Append(KLeaveFrom);
+ logger->iDebugString.Append(*(traceCleanupItem->iTraceName));
+ logger->WriteLogRaw(logger->iDebugString);
+
+ delete traceCleanupItem->iTraceName;
+
+ traceCleanupItem->iMethodHasLeft = ETrue;
+ }
+
+
+TTraceItem::TTraceItem(const TDesC& aTraceName)
+ {
+ iMethodHasLeft = EFalse;
+
+ CVpnDebugLogger* logger = CVpnDebugLogger::VpnDebugLogger();
+
+ iTraceName = aTraceName.Alloc();
+ if (iTraceName != NULL)
+ {
+ if (logger != NULL)
+ {
+ logger->iCallDepth++;
+
+ logger->iDebugString.Zero();
+ CVpnDebugLogger::TimeStamp(logger->iDebugString);
+
+ for (TInt i = 0; i < logger->iCallDepth; ++i)
+ {
+ logger->iDebugString.Append(KDepthMark);
+ }
+
+ logger->iDebugString.Append(KInMark);
+ logger->iDebugString.Append(KSeparator);
+ logger->iDebugString.Append(*iTraceName);
+ logger->WriteLogRaw(logger->iDebugString);
+ }
+ CleanupStack::PushL(TCleanupItem(TTraceItem::TraceCleanupOperation, this));
+ }
+ else
+ {
+ if (logger != NULL)
+ {
+ logger->WriteLogRaw(KTraceOutOfMemory);
+ }
+ }
+ }
+
+
+TTraceItem::~TTraceItem()
+ {
+ CVpnDebugLogger* logger = CVpnDebugLogger::VpnDebugLogger();
+
+
+ if (!iMethodHasLeft)
+ {
+ if (iTraceName != NULL)
+ {
+ if (logger != NULL)
+ {
+ logger->iDebugString.Zero();
+ CVpnDebugLogger::TimeStamp(logger->iDebugString);
+ logger->iDebugString.Append(KOutMark);
+ for (TInt i = 0; i < logger->iCallDepth; ++i)
+ {
+ logger->iDebugString.Append(KDepthMark);
+ }
+
+ logger->iDebugString.Append(KSeparator);
+ logger->iDebugString.Append(*iTraceName);
+ logger->WriteLogRaw(logger->iDebugString);
+
+ logger->iCallDepth--;
+ }
+ delete iTraceName;
+ CleanupStack::Pop(this);
+
+ }
+ else
+ {
+ if (logger != NULL)
+ {
+ logger->WriteLogRaw(KTraceOutOfMemory);
+ }
+ }
+ }
+ }
+
+
+
+void CVpnDebugLogger::InitializeDebugLoggerL(const TDesC& aFolder, const TDesC& aFileName)
+ {
+
+ CVpnDebugLogger* self = static_cast<CVpnDebugLogger*>(Dll::Tls());
+ if (self == NULL)
+ {
+ self = new (ELeave) CVpnDebugLogger;
+ CleanupStack::PushL(self);
+ self->ConstructL(aFolder, aFileName);
+ User::LeaveIfError(Dll::SetTls(self));
+ CleanupStack::Pop(self);
+ }
+ self->iReferenceCount++;
+ }
+
+
+void CVpnDebugLogger::ConstructL(const TDesC& aFolder, const TDesC& aFileName)
+ {
+ User::LeaveIfError(iFileLogger.Connect());
+ iFileLogger.SetDateAndTime(EFalse, EFalse);
+ iFileLogger.CreateLog(aFolder, aFileName, EFileLoggingModeAppend);
+ }
+
+
+CVpnDebugLogger::~CVpnDebugLogger()
+ {
+ if ( iFileLogger.Handle() != 0 )
+ {
+ iFileLogger.Write(_L("Logger delete"));
+ iFileLogger.CloseLog();
+ }
+
+ iFileLogger.Close();
+ }
+
+
+void CVpnDebugLogger::FinalizeDebugLogger()
+ {
+ CVpnDebugLogger* self = static_cast<CVpnDebugLogger*>(Dll::Tls());
+ __ASSERT_ALWAYS(self != NULL, User::Invariant());
+
+ self->iReferenceCount--;
+
+ if (self->iReferenceCount == 0)
+ {
+ Dll::SetTls(NULL);
+ delete self;
+ }
+ }
+
+
+CVpnDebugLogger* CVpnDebugLogger::VpnDebugLogger()
+ {
+ return static_cast<CVpnDebugLogger*>(Dll::Tls());
+ }
+
+
+void CVpnDebugLogger::WriteLogRaw(const TDesC& aLogMessage)
+ {
+ iFileLogger.Write(aLogMessage);
+ }
+
+
+void CVpnDebugLogger::LogWrite(const TDesC& aText)
+ {
+ CVpnDebugLogger* logger = VpnDebugLogger();
+ logger->iDebugString.Zero();
+ CVpnDebugLogger::TimeStamp(logger->iDebugString);
+
+ if (logger->iCallDepth > 0)
+ {
+ for (TUint i = 0; i < logger->iCallDepth; ++i)
+ {
+ logger->iDebugString.Append(_L(" "));
+ }
+ logger->iDebugString.Append(_L(" "));
+ }
+
+ logger->iDebugString.Append(aText);
+ logger->WriteLogRaw(logger->iDebugString);
+ }
+
+
+void CVpnDebugLogger::LogWrite(const TDesC8& aText)
+ {
+ CVpnDebugLogger* logger = VpnDebugLogger();
+ logger->iDebugString.Zero();
+ CVpnDebugLogger::TimeStamp(logger->iDebugString);
+
+ if (logger->iCallDepth > 0)
+ {
+ for (TUint i = 0; i < logger->iCallDepth; ++i)
+ {
+ logger->iDebugString.Append(_L(" "));
+ }
+ logger->iDebugString.Append(_L(" "));
+ }
+
+ TInt stringLength = logger->iDebugString.Length();
+ TUint spaceLeft = logger->iDebugString.MaxLength() - stringLength;
+
+ TUint16* ptr = const_cast<TUint16*>(logger->iDebugString.Ptr() + stringLength);
+ TPtr buffer(ptr, spaceLeft);
+ buffer.Copy(aText);
+
+ logger->iDebugString.SetLength(stringLength + buffer.Length());
+ logger->WriteLogRaw(logger->iDebugString);
+ }
+
+
+void CVpnDebugLogger::LogWriteF(TRefByValue<const TDesC> aFmt, ...)
+ {
+ VA_LIST list;
+ VA_START(list,aFmt);
+
+
+ CVpnDebugLogger* logger = VpnDebugLogger();
+ logger->iDebugString.Zero();
+ CVpnDebugLogger::TimeStamp(logger->iDebugString);
+
+ if (logger->iCallDepth > 0)
+ {
+ for (TUint i = 0; i < logger->iCallDepth; ++i)
+ {
+ logger->iDebugString.Append(_L(" "));
+ }
+ logger->iDebugString.Append(_L(" "));
+ }
+
+
+ const TDesC& format = aFmt;
+
+ logger->iDebugString.AppendFormatList(format, list);
+ logger->WriteLogRaw(logger->iDebugString);
+ }
+
+
+
+void CVpnDebugLogger::LogWriteF(TRefByValue<const TDesC8> aFmt, ...)
+ {
+ TBuf8<512> buf;
+
+ VA_LIST list;
+ VA_START(list,aFmt);
+
+ const TDesC8& format = aFmt;
+ buf.FormatList(format, list);
+
+ LogWrite(buf);
+ }
+
+
+void CVpnDebugLogger::HexWrite(const TDesC8& aData)
+ {
+ const TUint KRowLength = 16; //16 bytes in one row
+
+ TBuf<128> row;
+
+ TUint rowCount = aData.Length() / KRowLength;
+ if (aData.Length() % KRowLength != 0)
+ {
+ rowCount++;
+ }
+
+ for (TInt i = 0; i < rowCount; ++i)
+ {
+ _LIT(KRowStartFormat, "%04x: ");
+ TPtrC8 rowData(aData.Mid(KRowLength*i));
+
+ row.Zero();
+ row.Format(KRowStartFormat, i*KRowLength);
+ TInt j;
+ for (j = 0; j < KRowLength; ++j)
+ {
+ if ( j < rowData.Length())
+ {
+ _LIT(KDataByteFormat, "%02x ");
+ TUint8 byte = rowData[j];
+ row.AppendFormat(KDataByteFormat, byte);
+ }
+ else
+ {
+ row.Append(_L(" "));
+ }
+ }
+
+ for (j = 0; j < KRowLength && j < rowData.Length(); ++j)
+ {
+ TUint8 byte = rowData[j];
+ if (byte >= ' ' && byte <= '~')
+ {
+ row.Append(byte);
+ }
+ else
+ {
+ row.Append(_L("."));
+ }
+ }
+
+
+ LogWrite(row);
+ }
+ }
+
+
+void CVpnDebugLogger::TimeStamp(TDes& aBuffer)
+ {
+ TTime time;
+ time.HomeTime();
+ TDateTime dateTime = time.DateTime();
+
+
+ _LIT(KFormatTxt,"%02d/%02d/%d %02d:%02d:%02d.%03d ");
+ aBuffer.Format(KFormatTxt,
+ dateTime.Day()+1,
+ TInt(dateTime.Month()+1),
+ dateTime.Year(),
+
+ dateTime.Hour(), dateTime.Minute(), dateTime.Second(),
+ dateTime.MicroSecond()
+ );
+
+
+ }
+
+
+#endif //defined(_DEBUG)